标签:返回 执行 out for result set arrays array else
// 方法一 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); 如果删除方法一,只执行方法二,则不会出现异常。为什么呢? 具体分析: 首先方法一种,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() { List<Map<String, Object>> mapList = Lists.newArrayList(); Map<String, Object> map1 = Maps.newHashMap(); map1.put("nameItem", "香蕉"); map1.put("valueItem", 2); mapList.add(map1); Map<String, Object> map2 = Maps.newHashMap(); map2.put("nameItem", "香蕉"); map2.put("valueItem", 3); mapList.add(map2); Set<Integer> set = new HashSet<>(); List<Object> value1 = mapList.stream() .map(o -> { Optional<Object> option = o.entrySet().stream() .findAny() .filter(m -> m.getKey().equals("valueItem")) .map(i -> { Object value2 = i.getValue(); return value2; }) // .orElse("") //亦可以用orElse ; option.ifPresent(r -> set.add(Integer.valueOf(r + "")));//存在则直接调用 return option.get(); }).collect(Collectors.toList()); System.out.println("-1->" + set); System.out.println("-1->" + value1); }
java8 stream接口 终端操作 min,max,findFirst,findAny
标签:返回 执行 out for result set arrays array else
原文地址:https://www.cnblogs.com/hahajava/p/12103824.html