java - 创建一个通用方法来查找对象列表中某个属性的最大值

标签 java generics groovy java-8

我正在使用 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/

相关文章:

java - 将war部署到tomcat配置问题

java - 有没有办法在测试环境中运行 junit/TestNG 测试用例?

java - 如何限制通用数据结构以仅允许特定接口(interface)的元素?

python - 如何在 Django 列表中排序

java.util.regex.PatternSyntaxException : Dangling meta character '?'

Hibernate+GroovyTestcase : Unable to figure out the error in the code below . 。

Android Gradle 库构建 : Include & exclude files from the jar inside the generated aar

java - Hadoop作业控制

java - 如何在 SOAP POST 请求中附加文件(pdf、jpg 等)?

c# - 继承对象的容器