list.stream常用操作

list.stream常用操作

Java8中对集合可以采用流的方式进行一系列的操作,我们直接通过一些例子说明。

先定义一个list,并初始化一些数据:

        List<String> list = new ArrayList() {{
            add("小明");
            add("小红");
            add("小陈");
            add("小张");
            add("小张");
            add("小李");
            add("小王");
        }};
  1. 查找集合中符合条件的第一个元素
        // 查找集合中的第一个对象
        Optional<String> first = list.stream().filter(a -> "小李".equals(a)).findFirst();
        System.out.println(first); // 输出: Optional[小李]
        System.out.println(first.toString()); // 输出:Optional[小李]
  1. 返回符合查询条件的集合
        // 返回符合条件的集合
        List<String> collect = list.stream().filter(a -> "小张".equals(a)).collect(Collectors.toList());
        System.out.println(collect); // [小张, 小张]
        System.out.println(collect.toString()); // [小张, 小张]

1. filter 过滤

        // filter过滤
        List<Integer> list1 = Arrays.asList(21,32,22,33,44);
        List<Integer> collect1 = list1.stream().filter(tmp -> tmp > 25).collect(Collectors.toList());
        System.out.println(collect1); // [32, 33, 44]

2. map 对每个元素操作,不会改变原本数量

        List<String> collect2 = list.stream().map(a -> a + "你好").collect(Collectors.toList());
        System.out.println(collect2); // [小明你好, 小红你好, 小陈你好, 小张你好, 小张你好, 小李你好, 小王你好]

3. mapToInt 转成 IntStream

        // mapToInt 转成IntSream
        IntStream intStream = list1.stream().mapToInt(a -> a);
        List<Integer> collect3 = intStream.boxed().collect(Collectors.toList());
        System.out.println(collect3); // [21, 32, 22, 33, 44]
        // mapToDouble mapToLong 同理

4. flatMap 把多个集合整成一个

        // flatMap 把多个集合整成一个
        List<List<Integer>> lists = new ArrayList() {{
           add(Arrays.asList(1,2,3));
           add(Arrays.asList(4,5,6));
        }};
        System.out.println(lists); // [[1, 2, 3], [4, 5, 6]]
        Stream<Integer> integerStream = lists.stream().flatMap(Collection::stream);
        List<Integer> collect4 = integerStream.collect(Collectors.toList());
        System.out.println(collect4); // [1, 2, 3, 4, 5, 6]

5. distinct 去重

        // distinct 去重
        List<Integer> list2 = Arrays.asList(1,1,1,2,2,2,3,3,3);
        List<Integer> collect5 = list2.stream().distinct().collect(Collectors.toList());
        System.out.println(collect5); // [1, 2, 3]

6. sorted 排序

        // sort排序
        System.out.println(list1);
        List<Integer> collect6 = list1.stream().sorted().collect(Collectors.toList());
        System.out.println(collect6); // [21, 22, 32, 33, 44]

7. peek 不影响主流的情况下,对当前流元素进行提取

        // peek 不影响主流的情况下,对当前流元素进行提取
        System.out.println(list); // [小明, 小红, 小陈, 小张, 小张, 小李, 小王]
        List<String> nozhang = new ArrayList<>();
        List<String> noming = new ArrayList<>();
        List<String> nohong = list.stream().filter(a -> !a.contains("张")).peek(nozhang :: add)
                .filter(a ->  !a.contains("明")).peek(noming :: add)
                .filter(a ->  !a.contains("红")).collect(Collectors.toList());
        System.out.println(list); // [小明, 小红, 小陈, 小张, 小张, 小李, 小王]
        System.out.println(nozhang); // [小明, 小红, 小陈, 小李, 小王]
        System.out.println(noming); // [小红, 小陈, 小李, 小王]
        System.out.println(nohong); // [小陈, 小李, 小王]

8. limit 限定流元素数量

        //  limit 限定流元素数量
        System.out.println(collect4); // [1, 2, 3, 4, 5, 6]
        List<Integer> collect7 = collect4.stream().limit(3).collect(Collectors.toList());
        System.out.println(collect7); // [1, 2, 3]

9. skip 跳过多少个元素

        // skip 跳过多少个元素
        System.out.println(collect4); // [1, 2, 3, 4, 5, 6]
        List<Integer> collect8 = collect4.stream().skip(2).collect(Collectors.toList());
        System.out.println(collect8); // [3, 4, 5, 6]

10. foreach 遍历

        // foreach 遍历
        System.out.println(collect4); // [1, 2, 3, 4, 5, 6]
        List<Integer> foreach = new ArrayList<>();
        List<Integer> foreach1 = new ArrayList<>();
        collect4.stream().forEach(foreach :: add);
        collect4.stream().forEachOrdered(foreach1 :: add);
        System.out.println(foreach); // [1, 2, 3, 4, 5, 6]
        System.out.println(foreach1); // [1, 2, 3, 4, 5, 6]

11. reduce 计算

        // reduce 计算
        System.out.println(collect4); // [1, 2, 3, 4, 5, 6]
        Integer reduce = collect4.stream().reduce(0, (x, y) -> x + y);
        System.out.println(reduce); // 21
        Integer integer = collect4.stream().reduce((x, y) -> x + y).orElse(-1);
        System.out.println(integer); // 21
        Integer sum = collect4.stream().reduce(0, (x, y) -> x + y, Integer::sum);
        System.out.println(sum); // 21

12. min 最小 max 最大 count总数

        // min 最小 max 最大 count总数
        System.out.println(collect4); // [1, 2, 3, 4, 5, 6]
        Integer min = collect4.stream().min(Integer::compareTo).orElse(-1);
        Integer max = collect4.stream().max(Integer::compareTo).orElse(-1);
        long count = collect4.stream().count();
        System.out.println(min); // 1
        System.out.println(max); // 6
        System.out.println(count); // 6

13. findFirst 第一个 findAny 随便一个

        // findFirst 第一个 findAny 随便一个
        System.out.println(list); // [小明, 小红, 小陈, 小张, 小张, 小李, 小王]
        String s = list.stream().findFirst().toString();
        String s1 = list.stream().findAny().orElse("");
        System.out.println(s); // Optional[小明]
        System.out.println(s1); // 小明

你可能感兴趣的:(list,java,list.stream)