美文网首页
Java8 Stream流的简单使用

Java8 Stream流的简单使用

作者: Charon笔记 | 来源:发表于2020-02-28 10:29 被阅读0次

    本文主要讲解经常使用的n种代码场景

    首先需要知道几个关键的方法

    • map(mapToInt,mapToLong,mapToDouble)
    • 使用频率: #####

    说明 : 将流中的每一个元素T转换成R

    例如:

    // 获取集合中对象所有的姓名(处理数据应该经常用到)
    List<String> collect = personList.stream().map(Person::getName).collect(Collectors.toList());
    //如果要去重可以接着使用distinct()
    List<String> collect = personList.stream().map(Person::getName).distinct().collect(Collectors.toList());
    
    • flatMap(T -> Stream)
    • 使用频率: ####

    说明 : 将流中的每一个元素 T 映射为一个流,再把每一个流连接成为一个流,有人解释成切片.

    例如:

    //集合中还是集合,但是我想要合并成一个集合
    List<List<Person>> list = new ArrayList<>();
    List<Person> collect = list.stream().flatMap(people -> people.stream()).collect(Collectors.toList());
    //集合中对字符串处理之后合并成一个集合
    List<String> list = new ArrayList();
    list.add("1,2,3");
    list.add("4,5,6");
    list.add("7,8");
    List<String> collect = list.stream().flatMap(str -> Arrays.stream(str.split(","))).collect(Collectors.toList());
    
    • filter(T -> boolean)
    • 使用频率: ####

    说明 : 筛选出条件为true的元素

    例如:

    // 获取年龄==5的元素
    List<Person> collect = personList.stream().filter(person -> person.getAge() == 5).collect(Collectors.toList());
    
    • anyMatch(T -> boolean),allMatch(T -> boolean),noneMatch(T -> boolean),findAny() , findFirst()
    • 使用频率: ####

    说明 : 这些方法都是字面意思,用起来很简单
    例如:

    // 查询集合中年龄是否存在5岁的
    boolean anyMatch = personList.stream().anyMatch(person -> person.getAge().equals(5));
    
    • distinct()
    • 使用频率: ###

    说明 : 去重,equals方法比较两个元素是否相等

    // 这里需要说明的是由于Person为对象(引用类型),所以这里如果需要去重,就要自己重写equals方法.
    List<Person> collect = personList.stream().distinct().collect(Collectors.toList());
    
    • collect(Collectors.toXXX)
    • 使用频率: ######

    说明 : 收集流的方法

    // personList.stream().distinct()这里处理完之后返回的还是流对象,我们需要转换成集合的话就要使用.
    List<Person> collect = personList.stream().distinct().collect(Collectors.toList());
    //集合转成map对象的使用, 第一个为key,后面是value,第三个参数当key冲突的时候是保留前者还是保留后者,如果不处理的话,当key冲突时会报异常.
    Map<Integer, String> collect = personList.stream().collect(Collectors.toMap(person -> person.getAge(), person -> person.getName(), (p1, p2) -> p1));
    

    Stream大大的简化了我们日常代码的行数,方便了使用,另外还可以减少数据库的sql分组,limit处理.

                                                              ** 看完的给个赞吧**
                                                              ** 看完的给个赞吧**
                                                              ** 看完的给个赞吧**

    相关文章

      网友评论

          本文标题:Java8 Stream流的简单使用

          本文链接:https://www.haomeiwen.com/subject/utqthhtx.html