创建一个通用方法,以在对象列表中找到某个属性的最大值



我正在使用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}")
        }
    }
}

我最终通过了属性名称和我要寻找的关键名称。

相关内容

  • 没有找到相关文章

最新更新