我正在尝试重构java中两个基本上相同的私有方法。我目前正在做一些junit测试Assert的足球平局,并已编写了一个实用的方法,通过流式处理结果,并带回总进球得分或失球的一支球队。它们非常相似:
private Integer getTeamGoalsScored(final LeagueTable leagueTable, final Team team) {
return leagueTable.getAllResults().stream()
.filter(t -> t.getHomeTeam().equals(team))
.map(Result::getOutcome)
.map(Outcome::getGoalsScoredByHomeTeam).reduce(0, Integer::sum) +
leagueTable.getAllResults().stream()
.filter(t -> t.getAwayTeam().equals(team))
.map(Result::getOutcome)
.map(Outcome::getGoalsScoredByAwayTeam).reduce(0, Integer::sum);
}
private Integer getTeamGoalsAgainst(final LeagueTable leagueTable, final Team team) {
return leagueTable.getAllResults().stream()
.filter(t -> t.getHomeTeam().equals(team))
.map(Result::getOutcome)
.map(Outcome::getGoalsScoredByAwayTeam).reduce(0, Integer::sum) +
leagueTable.getAllResults().stream()
.filter(t -> t.getAwayTeam().equals(team))
.map(Result::getOutcome)
.map(Outcome::getGoalsScoredByHomeTeam).reduce(0, Integer::sum);
}
正如您所看到的,它们基本上是样板,我想知道如何将这两种方法合并为一种方法。我猜布尔值是真/假,得分/反对?
1条答案
按热度按时间k75qkfdt1#
您可以提取进行过滤和Map的函数。并在此函数中作为参数传递:
然后你可以在你的代码中使用:
更新
正如在评论中提到的那样
ToIntFunction
以及Predicate
;getSum
可以这样写: