我有以下Java POJO
public class Game {
public Game(){}
private String id;
private String startDate = "";
}
如何在Game对象列表中实现确定重复字段的功能?
例如,当两个游戏的开始日期相同时?
之前我使用过comparator
但仅在排序对象时使用了getTotalPages()
,例如基于最早的日期等,但它可以用于排序重复?
答案 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。