对于Java8中的每个循环:用Java8编写以下代码的最佳方法是什么
在for循环和过滤方面,用Java8编写以下代码的最佳方法是什么对于Java8中的每个循环:用Java8编写以下代码的最佳方法是什么,java,filtering,Java,Filtering,在for循环和过滤方面,用Java8编写以下代码的最佳方法是什么 boolean flag = true; List<Feed> availableFeeds = data.getAvailableFeeds(); for (Feed feedElement : availableFeeds) { String type = feedElement.getType(); if ("MatchState".equals(type)) { flag = f
boolean flag = true;
List<Feed> availableFeeds = data.getAvailableFeeds();
for (Feed feedElement : availableFeeds) {
String type = feedElement.getType();
if ("MatchState".equals(type)) {
flag = false;
break;
}
}
boolean标志=true;
List availableFeeds=data.getAvailableFeeds();
用于(进给元件:可用进给){
字符串类型=feedElement.getType();
如果(“匹配状态”。等于(类型)){
flag=false;
打破
}
}
您需要筛选和短暂休息:
boolean flag = !availableFeeds.stream()
.map(Feed::getType)
.anyMatch(type -> "MatchState".equals(type));
或:
第一行从列表中创建一个流。第二个函数通过调用getType
将每个Feed
映射到type。如果没有与字符串“MatchState”相等的类型,则最后一个返回true。一种方法是:
boolean flag = !data.getAvailableFeeds()
.stream()
.filter(Objects::nonNull)
.anyMatch(feed -> feed.getType().equals("MatchState"));
本例从
getAvailableFeeds()
返回的列表构建流
,然后调用Stream.anyMatch()
,它接受一个谓词
作为参数,在这种情况下,谓词是一个提要,其中提要不为null
,由feed.getType()
equals“MatchState”
“best”返回的提要类型是主观性的。到目前为止,您尝试了什么?您是否正在寻找如何将其实现为lambda?看起来不错,但为了正确封装,应该使用自己的方法。然后你会回来而不是休息,这是错误的。如果有任何匹配,则标志必须为false
@MạnhQuyế特恩盖伊ễn感谢您指出。Love“MatchState”::equals
这可能是一个noob问题,但我们是否需要在map内部处理null对象?@Amriteya如果您需要类型->类型.equals(“MatchState”)
,则是。但在这里是另一种方式。还需要先过滤掉空值。没有必要,因为我们使用了反向等于:“MatchState”。等于(type)
我的坏。我看到原来的代码也忽略了空值。我觉得你对NPE压力太大了。如果代码像你一样,我们必须检查数据!=空,然后是可用的种子!=空
。这太冗长了我只是想确保你的版本在逻辑上与OP的代码等效,但后来我意识到我误解了OP的代码。
boolean flag = data.getAvailableFeeds()
.stream()
.map(Feed::getType)
.noneMatch("MatchState"::equals)
boolean flag = !data.getAvailableFeeds()
.stream()
.filter(Objects::nonNull)
.anyMatch(feed -> feed.getType().equals("MatchState"));