我正在使用 Groovy/Java 创建一个小项目来跟踪足球运动员的统计数据。我有一个方法可以迭代 Player 对象的列表,并找到谁进球最多并且保持不失球最多。目前,这些方法使用相同的代码,我正在尝试创建一个通用方法,但不知道如何执行此操作,因为我想要找到最大值的每个属性都会不同,例如目标和干净的床单。任何人都可以给我一些指示,我是泛型的新手,我尝试传入一个泛型对象,但后来无法弄清楚如何定位该对象上的特定属性来计算循环中的最高值。
这是我的代码
https://gist.github.com/anonymous/0751dc3eae8f264e12ea4564f0e71dd2
@Override
Promise<Map<String, Double>> findPlayerWithMostMotms(List<Player> players) {
Map<String, Integer> mostManOfTheMatches = [:]
Integer currentlyMostManOfTheMatches = 0
returnPlayerWithHighestAverageRating(
players, mostManOfTheMatches, currentlyMostManOfTheMatches
)
return Promise.value(mostManOfTheMatches)
}
private
static List<Player> returnPlayerWithHighestAverageRating(List<Player> players,
Map<String, Integer> mostManOfTheMatches, Integer currentlyMostManOfTheMatches) {
players.each {
if (it.manOfTheMatches > currentlyMostManOfTheMatches) {
mostManOfTheMatches.clear()
mostManOfTheMatches.put(it.name, it.manOfTheMatches)
}
}
}
@Override
Promise<Map<String, Integer>> findMostCleanSheets(List<Player> players) {
Map<String, Integer> mostCleanSheets = [:]
Integer CurrentHighestValue = 0
returnPlayerWithMostCleanSheets(players, mostCleanSheets, CurrentHighestValue)
return Promise.value(mostCleanSheets)
}
private
static List<Player> returnPlayerWithMostCleanSheets(List<Player> players,
Map<String, Integer> mostCleanSheets, Integer CurrentHighestValue) {
players.each {
if (it.cleanSheets > CurrentHighestValue) {
mostCleanSheets.clear()
mostCleanSheets.put(it.name, it.cleanSheets)
}
}
}
最佳答案
你可以看看这个presentation去年在德国斯图加特举行的 Java 论坛上。
只有少数幻灯片使用德语,99%的内容是“基于英语”的Java源代码;喜欢
collection .sort(
Comparator
.comparing(Person::getName)
.thenComparing(Person::getId)
);
其中“Comparator”是一个示例实现,可以执行您正在寻找的操作 - 允许在某些“数据”类上调用“选择器”方法(例如 getName())。
如果您喜欢 java8,您会发现有很多 Material 可以帮助您入门。
关于java - 创建一个通用方法来查找对象列表中某个属性的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41122597/