草庐IT

streamed

全部标签

java - 从 Nullable 对象创建 Stream 的惯用方法

在生成流之前执行null-check的最佳/惯用方法是什么?我有一个方法接收可能是null的List。所以我不能只对传递的值调用stream()。如果值为空,是否有一些静态助手会给我一个空流? 最佳答案 我同意StuartMarks那list==null?Stream.empty():list.stream()是正确的方法(参见hisanswer),或者至少是在Java9之前执行此操作的正确方法(参见下面的编辑),但我会留下这个答案来演示可选API的用法。StreamgetStream(Listlist){returnOptiona

java - 从 Nullable 对象创建 Stream 的惯用方法

在生成流之前执行null-check的最佳/惯用方法是什么?我有一个方法接收可能是null的List。所以我不能只对传递的值调用stream()。如果值为空,是否有一些静态助手会给我一个空流? 最佳答案 我同意StuartMarks那list==null?Stream.empty():list.stream()是正确的方法(参见hisanswer),或者至少是在Java9之前执行此操作的正确方法(参见下面的编辑),但我会留下这个答案来演示可选API的用法。StreamgetStream(Listlist){returnOptiona

java - 如何短路 Stream 上的 reduce() 操作?

这与Howtoshort-circuitreduceonStream?本质上是同一个问题。.但是,由于该问题侧重于boolean值流,并且它的答案不能推广到其他类型和减少操作,所以我想问一个更一般的问题。我们如何对流进行归约,以便在遇到absorbingelement时短路进行归约操作?乘法的典型数学情况是0。这个流:intproduct=IntStream.of(2,3,4,5,0,7,8).reduce(1,(a,b)->a*b);将消耗最后两个元素(7和8),而不管是否遇到0后产品是已知的。 最佳答案 不幸的是,StreamA

java - 如何短路 Stream 上的 reduce() 操作?

这与Howtoshort-circuitreduceonStream?本质上是同一个问题。.但是,由于该问题侧重于boolean值流,并且它的答案不能推广到其他类型和减少操作,所以我想问一个更一般的问题。我们如何对流进行归约,以便在遇到absorbingelement时短路进行归约操作?乘法的典型数学情况是0。这个流:intproduct=IntStream.of(2,3,4,5,0,7,8).reduce(1,(a,b)->a*b);将消耗最后两个元素(7和8),而不管是否遇到0后产品是已知的。 最佳答案 不幸的是,StreamA

java - 一起迭代两个 Java-8-Stream

这个问题在这里已经有了答案:ZippingstreamsusingJDK8withlambda(java.util.stream.Streams.zip)(14个回答)关闭8年前。我想一起迭代两个Java-8-Stream,以便在每个迭代步骤中都有两个参数。类似的东西,somefunction产生类似Stream>.Streamas;Streambs;somefunction(as,bs).forEach((a,b)->foo(a,b));//orsomethinglikesomefunction(as,bs).forEach((Pairabs)->foo(abs.left(),abs

java - 一起迭代两个 Java-8-Stream

这个问题在这里已经有了答案:ZippingstreamsusingJDK8withlambda(java.util.stream.Streams.zip)(14个回答)关闭8年前。我想一起迭代两个Java-8-Stream,以便在每个迭代步骤中都有两个参数。类似的东西,somefunction产生类似Stream>.Streamas;Streambs;somefunction(as,bs).forEach((a,b)->foo(a,b));//orsomethinglikesomefunction(as,bs).forEach((Pairabs)->foo(abs.left(),abs

java - 是否可以使用 Java 8 Streams API 进行异步处理?

我一直在使用Java8中的CompletionStage/CompletableFuture来进行异步处理,效果很好。但是,有时我想要一个阶段来执行迭代器/项目流的异步处理,但似乎没有办法做到这一点。具体来说,Stream.forEach()具有在调用后所有项目都已处理的语义。我想要同样的东西,但是用CompletionStage代替,例如:CompletionStagedone=stream.forEach(...);done.thenRun(...);如果Stream由异步流结果支持,这将比在上述代码本身中等待它完成要好得多。是否可以使用当前的Java8API以某种方式构建它?解决

java - 是否可以使用 Java 8 Streams API 进行异步处理?

我一直在使用Java8中的CompletionStage/CompletableFuture来进行异步处理,效果很好。但是,有时我想要一个阶段来执行迭代器/项目流的异步处理,但似乎没有办法做到这一点。具体来说,Stream.forEach()具有在调用后所有项目都已处理的语义。我想要同样的东西,但是用CompletionStage代替,例如:CompletionStagedone=stream.forEach(...);done.thenRun(...);如果Stream由异步流结果支持,这将比在上述代码本身中等待它完成要好得多。是否可以使用当前的Java8API以某种方式构建它?解决

java - Stream.collect 方法中的组合器如何在 java 8 中工作?

我创建了简单的演示:publicstaticvoidmain(String[]args){Listlist2=Arrays.asList("adf","bcd","abc","hgr","jyt","edr","biu");Stringcollect=list2.stream().collect(String::new,(res,elem)->{res=res.concat("").concat(elem);//System.out.printf("res=%s,elem=%s\n",res.isEmpty(),elem);},(res1,res2)->{System.out.prin

java - Stream.collect 方法中的组合器如何在 java 8 中工作?

我创建了简单的演示:publicstaticvoidmain(String[]args){Listlist2=Arrays.asList("adf","bcd","abc","hgr","jyt","edr","biu");Stringcollect=list2.stream().collect(String::new,(res,elem)->{res=res.concat("").concat(elem);//System.out.printf("res=%s,elem=%s\n",res.isEmpty(),elem);},(res1,res2)->{System.out.prin