关于List、Map、Stream初始化方式

 更新时间:2022年08月23日 08:30:50   作者:HeroSongZ  
这篇文章主要介绍了关于List、Map、Stream初始化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

List、Map、Stream初始化

第一种方法

     初始化List
     List<string> list = new ArrayList<string><string>();  
     list.add("string1");  
     list.add("string2");  
     list.add("stringN");  
    
     初始化Map
     Map</String , Object> map = new HashMap</String , Object>();  
     map.put("key1", "value1");  
     map.put("key2", "value2");  
     map.put("keyN", "valueN");  

第二种方法(双括号初始化法/匿名内部类)

     初始化List   
     List<string> list = new ArrayList<string>(){{  
     add("string1");  
     add("string2");  
     add("stringN");    }};  
     
     初始化Map    
     Map</String , String> map = new HashMap</String , Object>(){{  
     put("keyOne", "valueOne");  
     put("keyTwo", "valueTwo");  
     put("keyThree", "valueThree");   
     }};

慎用, 非静态内部类/ 匿名内部类包含了外围实例的引用, 如果拥有比外部类更长的生命周期,

有内存泄露隐患

stream初始化

     Map map = Stream.of(1,2,3,4).collect(
     Collectors.toMap(x -> x, integer -> integer,(key, value) -> value, HashMap::new));
     System.out.println(JSONObject.toJSONString(map));
    
     List list = Stream.of(1,2,3,4).collect(Collectors.toList());
     System.out.println(JSONObject.toJSONString(list));

利用Array与ArrayList的相互转换方法初始化ArrayList,代码如下:

ArrayList<String> list = new ArrayList(Arrays.asList("banana", "milk", "bacon"));  

List Stream 常用方法

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象(菜鸟教程)。这里的Stream不同于IO中的stream。

声明Student对象

public class Student {
    private String name;
    private Integer age;
    private Integer math;
    private Integer english;
    //get set
    public Student(String name, Integer age, Integer math, Integer english) {
        super();
        this.name = name;
        this.age = age;
        this.math = math;
        this.english = english;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", math=" + math + ", english=" + english + "]";
    }
}

Stream一些常用的API 

public class StreamDemo {
    List<Student> list = null;
    //初始化数据
    @Before
    public void beforetest() {
        list = Arrays.asList(new Student("Tom", 18, 88, 90), new Student("Jerry", 20, 77, 89),
                new Student("Lily", 17, 98, 79), new Student("Lucy", 19, 70, 80), new Student("LiLei", 18, 88, 90),
                new Student("HanMeiMei", 21, 87, 79));
    } 
    
    @Test
    public void streamtest() {
        // filter 过滤器返回还是一个stream流对象
        //查询math成绩大于80的学生并遍历输出
        list.stream().filter(e->e.getMath()>80).forEach(System.out::println);//.forEach(e->System.out.println(e))
        //统计数量count
        System.out.println(list.stream().count());
        //如统计总分大于160的人数
        System.out.println(list.stream().filter(e->e.getEnglish()+e.getMath()>160).count());
        //limit  取前n个值
        list.stream().limit(3).forEach(System.out::println);
        //skip 跳过前n个
        list.stream().skip(2).forEach(System.out::println);
        //distinct 去除重复数据
        list.stream().distinct().forEach(System.out::println);
        //map 映射元素可以对元素进行操作   例如对每个学生年龄加1
        list.stream().map(e->{
            e.setAge(e.getAge()+1);
            return e;
        }).forEach(System.out::println);
        //sorted 排序 
        //升序
        list.stream().sorted((a,b)->{
            return a.getEnglish().compareTo(b.getEnglish());
        });
        //降序
        list.stream().sorted((a,b)->{
            return b.getEnglish().compareTo(a.getEnglish());
        });
        //返回第一个元素  
        Optional<Student> first = list.stream().findFirst();
        System.out.println(first.get());
        //返回任意一个元素
        System.out.println(list.stream().findAny().get());
        //anyMatch 是否匹配任意一元素  检查是否包含名字为Tom的
        System.out.println(list.stream().anyMatch(e->e.getName().equals("Tom")));
        //allMatch 是否匹配所有元素
        System.out.println(list.stream().allMatch(e->e.getName().equals("Tom")));
        //noneMatch  是否未匹配所有元素
        System.out.println(list.stream().noneMatch(e->e.getName().equals("Tom")));
        //findFirst 返回元素中第一个值
        Student student = list.stream().findFirst().get();
        //findAny 返回元素中任意一个值
        Student student1 = list.stream().findAny().get();
        //max 返回最大值 查询英语成绩最高的学生
        Student student2 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get();
        //min 最小值  将上面l1,l2位置对调
        Student student3 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get();
        //将流对象转为list 
        list.stream().filter(e->e.getMath()>80).collect(Collectors.toList());
        //将流转未set
        list.stream().filter(e->e.getMath()>80).collect(Collectors.toSet());
        //对对象中的某项进行统计
        IntSummaryStatistics c = list.stream().collect(Collectors.summarizingInt(Student::getEnglish));
        System.out.println(c);//IntSummaryStatistics{count=6, sum=507, min=79, average=84.500000, max=90}
    }   
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis-Plus 批量插入数据的操作方法

    MyBatis-Plus 批量插入数据的操作方法

    spring boot+mybatis plus环境,单条插入用的是BaseMapper自带的insert方法,本文重点给大家介绍MyBatis-Plus 批量插入数据的操作方法,感兴趣的朋友一起看看吧
    2021-09-09
  • 注解@TableName,@TableField,pgsql的模式对应方式

    注解@TableName,@TableField,pgsql的模式对应方式

    这篇文章主要介绍了注解@TableName,@TableField,pgsql的模式对应方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • SpringBoot HATEOAS用法简介(入门)

    SpringBoot HATEOAS用法简介(入门)

    这篇文章主要介绍了SpringBoot HATEOAS用法简介(入门),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 使用Spring Boot+gRPC构建微服务并部署的案例详解

    使用Spring Boot+gRPC构建微服务并部署的案例详解

    这篇文章主要介绍了使用Spring Boot+gRPC构建微服务并部署,Spring Cloud仅仅是一个开发框架,没有实现微服务所必须的服务调度、资源分配等功能,这些需求要借助Kubernetes等平台来完成,本文给大家介绍的非常详细,需要的朋友参考下吧
    2022-06-06
  • 从千千静听歌词服务器获取lrc歌词示例分享

    从千千静听歌词服务器获取lrc歌词示例分享

    这篇文章主要介绍了使用PHP从千千静听歌词服务器获取lrc歌词的方法,大家参考使用吧
    2014-01-01
  • Java中的接口多继承机制

    Java中的接口多继承机制

    大家好,本篇文章主要讲的是Java中的接口多继承机制,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • IntelliJ IDEA使用maven实现tomcat的热部署

    IntelliJ IDEA使用maven实现tomcat的热部署

    这篇文章主要介绍了IntelliJ IDEA使用maven实现tomcat的热部署,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • SpringBoot整合Druid实现SQL监控和数据库密码加密

    SpringBoot整合Druid实现SQL监控和数据库密码加密

    Druid连接池是阿里巴巴开源的数据库连接池项目,Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能,本文给大家介绍了SpringBoot整合Druid实现SQL监控和数据库密码加密,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-06-06
  • 在Window系统下安装Netbeans9的方法

    在Window系统下安装Netbeans9的方法

    今天小编就为大家分享一篇关于在Window系统下安装Netbeans9的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Springboot RocketMq实现过程详解

    Springboot RocketMq实现过程详解

    这篇文章主要介绍了Springboot RocketMq实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论