Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据重复字段对对象列表进行排序?_Java_List_Duplicates - Fatal编程技术网

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

Java 如何根据重复字段对对象列表进行排序?,java,list,duplicates,Java,List,Duplicates,我有以下Java POJO public class Game { public Game(){} private String id; private String startDate = ""; } 如何实现在游戏对象列表中确定重复字段的功能 例如,当两个游戏的开始日期相同时 我以前使用过comparator,但仅在对对象进行排序时使用过,例如根据最早日期等,但它能否用于对重复项进行排序 比较器。。。它可以用于对重复项进行排序吗 对。当compareTo返

我有以下Java POJO

public class Game  {

    public Game(){} 

    private String id;

    private String startDate = "";
}
如何实现在游戏对象列表中确定重复字段的功能

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

我以前使用过
comparator
,但仅在对对象进行排序时使用过,例如根据最早日期等,但它能否用于对重复项进行排序

比较器。。。它可以用于对重复项进行排序吗

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

确定游戏对象列表中的重复字段

制作一个比较条件为的
比较器

if (game1.startDate.equals(game2.startDate)) return 0;
顺便说一下,您可能希望使用某种类型的
LocalDateTime
对象而不是字符串。然后,如果要查找“重复”条目、分组元素并查找大小大于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());

只要
startDate
是私有的,比较器就可能无法访问此字段。众所周知的方法
equals()
可能会被覆盖,但如果您想检查对象是否符合不同的相等条件,这是不够的


但是您可以实现一个getter,它将为比较器提供
startDate
。或者,您可以输入方法
boolean issamedataas(Game other)
,该方法将为重复返回true。

比较器方法具有返回-1、0和1的约定。若方法返回0,则表示两个对象相等。您究竟将如何对“重复项”进行排序?如果它们相等,则任一顺序都是“排序的”
Comparator.comparating(Game::getStartDate)