我正在使用groovy/java创建一个小侧面项目来跟踪足球运动员的统计数据。我有一种迭代的方法,可以在玩家对象的列表中迭代,并找到谁得分最高并保持最干净的床单的方法。目前,方法使用相同的代码,我正在尝试制作一种通用方法,但看不到如何做到这一点,因为我想找到的每个属性最大的属性将是不同的,例如目标和清洁纸。谁能给我一些指示,我是仿制药的新手,我试图传递通用对象,但是无法弄清楚如何将该对象上的特定属性定位到循环中的最高值。
这是我的代码
https://gist.github.com/anonymous/0751DC3EE8F264E12EA4564F0E71DD2
@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)
}
}
}
您可以在德国斯图加特德国的Java论坛上查看此演示文稿。
只有少数幻灯片使用德语,其中99%的内容是"基于英语"的Java源代码;喜欢
collection .sort(
Comparator
.comparing(Person::getName)
.thenComparing(Person::getId)
);
其中"比较器"是一个实现您想要的示例实现 - 允许在某些"数据"类上调用"选择器"方法(例如getName())。
如果您进入Java8,您会发现很多材料可以让您开始。
我结束了这样做,我敢肯定有一种更好的实现方法。
@Override
Promise<Map<String, ?>> findObjectwithLargestSpecificProperty(List<?> objects, String key, String propertyName) {
Map<String, ?> highestKeyValuePair = [:]
Integer currentHighestValue = 0
returnObjectWithLargestSpecificPropertyValue(objects, highestKeyValuePair, currentHighestValue, key, propertyName)
return Promise.value(highestKeyValuePair)
}
private
static List<?> returnObjectWithLargestSpecificPropertyValue(List<?> objects, Map<String, ?> highestKeyValuePair, Integer currentHighestValue, String key, String propertyName) {
objects.each {
if (it."${propertyName}" > currentHighestValue) {
highestKeyValuePair.clear()
highestKeyValuePair.put(it."${key}", it."${propertyName}")
}
}
}
我最终通过了属性名称和我要寻找的关键名称。