Java 8 函数接口类Stream方法探索

1、distinct()
public static void distantTest() {
        List<String> list = Arrays.asList("a","z","d","b","a","g");
        List<String> collect = list.stream().distinct().collect(Collectors.toList());
        collect.forEach(s -> System.out.println(s)); //结果:a,z,d,b,g
    }

2、filter()

private static void testFilter() {
        List<String> list = Arrays.asList("a","z","d","b","a","g");
        List<String> stringList = list.stream().filter(str -> str.equals("a")).collect(Collectors.toList());
        System.out.println(stringList); // 结果:[a, a]
    }

3、map()

private static void testMap() {
        List<String> list = Arrays.asList("a","z","d","b","a","g");
        List<String> stringList = list.stream().map(str -> str + "123")
                .collect(Collectors.toList());
        System.out.println(stringList); //结果:[a123, z123, d123, b123, a123, g123]
    }

4、sorted()

private static void testSorted() {
        List<String> list = Arrays.asList("aw", "z", "d", "b", "ab", "g");
        List<String> collect = list.stream().sorted().collect(Collectors.toList());
        System.out.println(collect); //结果:[ab, aw, b, d, g, z]
        List<String> collect1 = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        System.out.println(collect1); //结果:[z, g, d, b, aw, ab]

        //注释:字段类型为Integer,可以进行正常的排序
    }

5、limit()

private static void limitTest() {
        List<String> list = Arrays.asList("a", "z", "d", "b", "a", "g");
        List<String> collect = list.stream().limit(2).collect(Collectors.toList());
        System.out.println(collect); //结果:[a, z]
    }

6、skip()

private static void skipTest() {
        List<String> list = Arrays.asList("a", "z", "d", "b", "a", "g");
        List<String> collect = list.stream().skip(3).collect(Collectors.toList());
        System.out.println(collect); //结果:[b, a, g]
    }

7、forEach 和 forEachOrdered

private static void testForEach() {
        //主要的区别在并行流的处理上
        //输出的顺序不一定(效率更高)
        Stream.of("AAA", "BBB", "CCC").parallel().forEach(s -> System.out.println("Output:" + s));
        //输出的顺序与元素的顺序严格一致
        Stream.of("AAA", "BBB", "CCC").parallel().forEachOrdered(s -> System.out.println("Output1:" + s));
    }
Output:BBB
Output:CCC
Output:AAA
Output1:AAA
Output1:BBB
Output1:CCC

8、reduce

    private static void testReduce() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4);
        Integer sum = list.stream().reduce(5, Integer::sum);
        System.out.println("sum == " + sum);//结果:15

        Optional<Integer> reduce = list.stream().reduce(Integer::sum);
        Integer integer = reduce.get();
        System.out.println("integer===" + integer);//结果:10

        list.stream().reduce(Integer::max).ifPresent(System.out::println);//结果:4

        list.stream().reduce(Integer::min).ifPresent(System.out::println); //结果:1

        list.stream().reduce((x, y) -> x > y ? x : y).ifPresent(System.out::println); //结果 :4
        
        int accResult = Stream.of(1, 2, 3, 4)
                .reduce(0, (acc, item) -> {
                    System.out.println("acc : "  + acc);
                    acc += item;
                    System.out.println("item: " + item);
                    System.out.println("acc+ : "  + acc);
                    System.out.println("--------");
                    return acc;
                });
        System.out.println("accResult: " + accResult);


    }
acc : 0
item: 1
acc+ : 1
--------
acc : 1
item: 2
acc+ : 3
--------
acc : 3
item: 3
acc+ : 6
--------
acc : 6
item: 4
acc+ : 10
--------
accResult: 10

9、anyMatch()、allMatch()、noneMatch()

private static void testMatch() {
        List<Integer> list = Arrays.asList(1, 1, 1, 1, 1, 1);
        boolean b = list.stream().anyMatch(x -> x == 1);
        System.out.println("b==="+b);//true   只要有一个匹配
        boolean b1 = list.stream().allMatch(x -> x == 1);
        System.out.println("b1==="+b1);//true  需要全部匹配
        boolean b2 = list.stream().noneMatch(x -> x == 1);
        System.out.println("b2==="+b2);//false  没有一个匹配
    }

 

转载于:https://my.oschina.net/u/4055223/blog/2996100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值