Java 8 Streams多条件过滤:能否用单个Lambda简化赛事结果筛选方法?
如何用单个Lambda简化finalResults方法?
当然可行!而且这样的代码会更简洁高效,不用额外创建中间列表,也不用两次遍历你的resultList。
先还原一下你原方法的完整逻辑(根据你给出的片段补充):
private Collection<FixtureResult> finalResults(Team team) { List<FixtureResult> finalResults = new ArrayList<>(); List<FixtureResult> homeResults = resultList.stream() .filter(fixture -> fixture.getHome().equals(team)) .collect(Collectors.toList()); List<FixtureResult> awayResults = resultList.stream() .filter(fixture -> fixture.getAway().equals(team)) .collect(Collectors.toList()); finalResults.addAll(homeResults); finalResults.addAll(awayResults); return finalResults; }
你只需要在filter中用一个Lambda表达式同时判断主队和客队是否匹配目标team,就能一次性完成筛选,直接收集结果返回:
private Collection<FixtureResult> finalResults(Team team) { return resultList.stream() // 单个Lambda同时覆盖主队和客队的匹配条件 .filter(fixture -> fixture.getHome().equals(team) || fixture.getAway().equals(team)) .collect(Collectors.toList()); }
这样做的好处:
- 避免了两次遍历
resultList,提升了性能 - 不需要创建中间的
homeResults和awayResults列表,减少了内存开销 - 代码结构更紧凑,逻辑一目了然
内容的提问来源于stack exchange,提问作者Clatty Cake
相关产品推荐
相关产品推荐

