Java中处理集合利器------stream流

使用Stream常常可以避免一些for循环造成的代码臃肿。在实际开发中,遇到可以用Stream处理的场景也越来越多,源码还未参透。在这只总结一些常用到的方法。

Stream的常用方法

常用方法用到的集合:

        List<Integer> integers = new ArrayList<>();
        integers.add(3);
        integers.add(1);
        integers.add(1);
        integers.add(2);
        integers.add(4);
        integers.add(5);

forEach()
遍历集合中的每一个元素,括号里面可以队元素进行处理。
filter()
filter用于过滤,括号里面一般使用lambda表达式设置过滤条件。

    //过滤掉list中大于等于4的元素,::为语法糖。System.out::println与integer-> System.out.println(integer)等价
    integers.stream().filter(integer -> integer<4).forEach(System.out::println);

distinct()
distinct用于去重。

    //取出list中重复的元素
    integers.stream().distinct().forEach(System.out::println);

skip()
skip用于跳过前面元素,括号里面写具体跳过元素的数字

    //跳过前三个元素
    integers.stream().skip(3).forEach(System.out::println);

limit()
limit用于统计前面元素,括号里面写具体统计元素的数字

    //取出前三个元素
    integers.stream().limit(3).forEach(System.out::println);

sorted()
sorted 方法用于排序。

    //对集合中的元素进行排序
    integers.stream().sorted().forEach(System.out::println);

count()
count方法用于获取集合中的元素个数

    //集合元素的个数
    System.out.println(integers.stream().count());

map()
map用于处理集合值,一般传入该集合,然后对该集合做处理。

    //将集合中的元素都变为以前的二次方
    integers.stream().map(integer -> integer*integer).forEach(System.out::println);

Stream中的collect()

collect用于集合的转化,一般放在末尾,将集合的数据处理完成之后,我们需要将处理后的数据装到什么集合中就在collect的括号里调用Collectors的方法。常用的Collectors方法有toList、toSet、toMap、groupingBy、mapping等方法。比如想要将List存储的对象中的一个或者多个字段提取出来,或者想要将一个集合中的某个属性对应的数据的集合提出出来。collect来实现,具体用法参考下面实例:

        ArrayList<Item> items = new ArrayList<>();
        items.add(new Item("tcc1",1));
        items.add(new Item("tcc2",2));
        items.add(new Item("tcc3",3));
        items.add(new Item("tcc4",4));
        items.add(new Item("tcc5",1));
      //取出items中name元素,并存入set集合Item::getName等价于item->item.getName()
        Set<String> groupCodes = items.stream().map(Item::getName).collect(Collectors.toSet());
        System.out.println(groupCodes);
      //取出items中name和age分别作为key和value,放入map
        Map<String, Integer> map = items.stream().collect(Collectors.toMap(Item::getName, Item::getAge));
        System.out.println(map);
        //将集合以年龄排序,返回年龄 和 年龄对应的集合的map
        Map<Integer, List<Item>> collect = items.stream().collect(Collectors.groupingBy(Item::getAge));
        System.out.println(collect);
        //将集合以年龄排序,返回年龄和 年龄中对应集合中的name集合的map
        Map<Integer, Set<String>> collect1 = items.stream().collect(
                Collectors.groupingBy(Item::getAge,
                        Collectors.mapping(Item::getName, Collectors.toSet())));
        System.out.println(collect1);
原创文章 49 获赞 55 访问量 8396

猜你喜欢

转载自blog.csdn.net/tc979907461/article/details/105547578