对于Java8中的每个循环:用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

在for循环和过滤方面,用Java8编写以下代码的最佳方法是什么

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"));