• java8 stream接口 终端操作 min,max,findFirst,findAny


        // 方法一  https://www.cnblogs.com/secbro/p/11685681.html
        Integer id = list.stream().map(Foo::getId).findAny().orElse(null);
        // 方法二
        Integer id = list.stream().findAny().map(Foo::getId).orElse(-1);
      
       //方法三
       A a = bList().stream().filter(b -> "test".equals(b.getName())).findAny().get();
       结果后面发现这个方法三 并不是找得到就返回,找不到就不做处理,而是找不到直接抛异常了。 如果删除方法一,只执行方法二,则不会出现异常。为什么呢? 具体分析: 首先方法一种,list.stream().map(Foo::getId)通过map,对原来的Stream进行了转换,生成了一个新的Stream,而该Stream中值是Foo的id属性,默认为null。针对一个元素为null的Stream调用findAny(),当然就抛出异常了。 而方法二,list.stream().findAny()获得是Optional,然后对Optional调用map方法获得的是Optional,而Optional里面的值为null,再调用orElse方法却不会出现问题。
    public static void testStream2ResultOperation() {
            List<String> strs = Arrays.asList("d", "b", "a", "c", "a");
            Optional<String> min = strs.stream().min(Comparator.comparing(Function.identity()));
            Optional<String> max = strs.stream().max((o1, o2) -> o1.compareTo(o2));
            System.out.println(String.format("min:%s; max:%s", min.get(), max.get()));// min:a; max:d
    
            Optional<String> aa = strs.stream().filter(str -> !str.equals("a")).findFirst();//d
            Optional<String> bb = strs.stream().filter(str -> !str.equals("a")).findAny();//d
    
            Optional<String> aa1 = strs.parallelStream().filter(str -> !str.equals("a")).findFirst();//d
            Optional<String> bb1 = strs.parallelStream().filter(str -> !str.equals("a")).findAny();//? 返回的是最快处理完的那个线程的数据
    
            System.out.println(aa.get() + "===" + bb.get());// d===d
            System.out.println(aa1.get() + "===" + bb1.get());// d===b or d===c
        }

     // Optional$findAny 操作    public static void testOptional$findAny() {

  • 相关阅读:
    Luogu3119 [USACO15JAN]Grass Cownoisseur G
    BZOJ4361 isn
    洛谷1330 封锁阳光大学
    codechef AUG17 T2 Chef and Mover
    codechef AUG17 T1 Chef and Rainbow Array
    【bzoj3211】花神游历各国&&【bzoj3038】上帝造题的七分钟2
    noip 瑞士轮 ————归并排序解法
    记录string的妙用
    洛谷P1550 [USACO08OCT]打井Watering Hole
    汕头市队赛 SRM 09 C 撕书
  • 原文地址:https://www.cnblogs.com/hahajava/p/12103824.html
Copyright © 2020-2023  润新知