如何根据重复的字段对对象列表进行排序?

时间:2018-01-05 10:41:43

标签: java list duplicates

我有以下Java POJO

public class Game  {

    public Game(){} 

    private String id;

    private String startDate = "";
}

如何在Game对象列表中实现确定重复字段的功能?

例如,当两个游戏的开始日期相同时?

之前我使用过comparator但仅在排序对象时使用了getTotalPages(),例如基于最早的日期等,但它可以用于排序重复?

3 个答案:

答案 0 :(得分:1)

  

比较器......它可以用来对重复项进行排序吗?

是。当compareTo返回0时,它将所有相等的元素组合在一起。

  

确定Game对象列表中的重复字段?

制作一个比较条件为

Comparator<Game>
if (game1.startDate.equals(game2.startDate)) return 0;

顺便说一下,您可能希望使用某种类型的LocalDateTime对象而不是字符串。然后你可以实际订购日期/时间

答案 1 :(得分:0)

如果你想找到&#34;重复&#34;条目,组元素和查找大小&gt;的组2。

在Java 8中,它将类似于:

games
    .stream()
    .collect(Collectors.groupingBy(Game::getStartDate))
    .values()
    .stream()
    .filter(group -> group.size() > 1)
    .map(group -> group.get(0))
    .collect(Collectors.toList());

答案 2 :(得分:0)

只要startDate是私有的,比较器可能无法访问此字段。众所周知的方法equals()可能会被覆盖,但如果你想检查不同的平等标准对象,这就不够了。

但是你可以实现一个将startDate提供给比较器的getter。或者你可以强制方法boolean isSameDateAs(Game other),它将为重复返回true。

相关问题