仅返回 Java 流中的真实谓词 [重复]
Posted
技术标签:
【中文标题】仅返回 Java 流中的真实谓词 [重复]【英文标题】:Return only true predicates in Java stream [duplicate] 【发布时间】:2018-07-17 11:47:01 【问题描述】:我有以下方法:
public boolean isMsgOk(String msg) ...
我想在这里调用这个方法:
public String[] returnOkMessages(String... msgs)
return Arrays
.asList(messagessgs)
.stream(message->isMsgOk(message))
.anyMatch() ???;
我想返回String
s 中的List
,isMsgOk
方法返回true
。
我怎样才能收集它们?
【问题讨论】:
注意anyMatch
返回一个boolean
,firstMatch
返回一个String
和toArray
返回一个String[]
我相信它是重复的。有很多关于filter
+collect
模式的问题。
【参考方案1】:
使用filter
,然后使用collect
到List
:
return Arrays.asList(messagessgs)
.stream()
.filter(message->isMsgOk(message))
.collect(Collectors.toList())
或:
return Arrays.stream(messagessgs)
.filter(this::isMsgOk)
.collect(Collectors.toList())
编辑:
如果输出应该是一个数组,使用:
return Arrays.stream(messagessgs)
.filter(this::isMsgOk)
.toArray(String[]::new)
【讨论】:
由于“Collectors.toList()”,它无法正常工作。它说:“无法应用收集器中的 toList()” @Twi 我注意到你的方法的返回类型是一个数组,而不是一个列表,所以也许你应该使用.toArray(String[]::new)
而不是.collect()
。
我将返回类型更改为 ArrayListList<String>
【参考方案2】:
将它们收集到List
(您也可以使用方法引用而不是 lambda)
.filter(this::isMsgOk)
.toArray(String[]::new);
【讨论】:
以上是关于仅返回 Java 流中的真实谓词 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Java 8 流中的 LINQ Enumerable.Single() [重复]
从 C# 中的 WebSocket 流中读取整个字符串 [重复]