Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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列表排序删除重复ID并返回最新日期时间_Java_Sorting_Arraylist_Comparator - Fatal编程技术网

Java列表排序删除重复ID并返回最新日期时间

Java列表排序删除重复ID并返回最新日期时间,java,sorting,arraylist,comparator,Java,Sorting,Arraylist,Comparator,上课 import org.joda.time.DateTime; public class Timestamp { String id; DateTime timestamp = new DateTime(); public Timestamp(String id, DateTime timestamp){ this.id = id; this.timestamp = timestamp; } } 和主要功能 publ

上课

import org.joda.time.DateTime;

public class Timestamp {
    String id;
    DateTime timestamp = new DateTime();

    public Timestamp(String id, DateTime timestamp){
         this.id = id;
         this.timestamp = timestamp;
    }

}
和主要功能

public static void main(String[] args) {
List<Timestamp > list = new ArrayList<Timestamp >();

list .add(new Timestamp ("1"));
list .add(new Timestamp ("2"), new DateTime().plusHours(1));
list .add(new Timestamp ("3"), new DateTime().plusHours(2));
list .add(new Timestamp ("4"), new DateTime().plusHours(3));
list .add(new Timestamp ("5"), new DateTime().plusHours(4));
list .add(new Timestamp ("1"), new DateTime().plusHours(5));
list .add(new Timestamp ("2"), new DateTime().plusHours(6));
list .add(new Timestamp ("3"), new DateTime().plusHours(7));
list .add(new Timestamp ("4"), new DateTime().plusHours(8));
list .add(new Timestamp ("5"), new DateTime().plusHours(9));
list .add(new Timestamp ("6"), new DateTime().plusHours(10));
list .add(new Timestamp ("1"), new DateTime().plusHours(11));
list .add(new Timestamp ("3"), new DateTime().plusHours(12));
list .add(new Timestamp ("7"), new DateTime().plusHours(13));
list .add(new Timestamp ("2"), new DateTime().plusHours(14));
list .add(new Timestamp ("3"), new DateTime().plusHours(15));
list .add(new Timestamp ("4"), new DateTime().plusHours(16));
list .add(new Timestamp ("8"), new DateTime().plusHours(17));
list .add(new Timestamp ("9"), new DateTime().plusHours(18));
list .add(new Timestamp ("10"), new DateTime().plusHours(19));
List<Object> newList = removeDuplicates(list);
}
publicstaticvoidmain(字符串[]args){
列表=新的ArrayList();
添加(新的时间戳(“1”));
添加(新的时间戳(“2”),新的日期时间().plusHours(1));
添加(新时间戳(“3”),新日期时间().plusHours(2));
添加(新的时间戳(“4”),新的日期时间().plusHours(3));
添加(新的时间戳(“5”),新的日期时间().plusHours(4));
添加(新时间戳(“1”),新日期时间().plusHours(5));
添加(新的时间戳(“2”),新的日期时间().plusHours(6));
添加(新的时间戳(“3”),新的日期时间().plusHours(7));
添加(新时间戳(“4”),新日期时间().plusHours(8));
添加(新的时间戳(“5”),新的日期时间().plusHours(9));
添加(新的时间戳(“6”),新的日期时间().plusHours(10));
添加(新的时间戳(“1”),新的日期时间().plusHours(11));
添加(新的时间戳(“3”),新的日期时间().plusHours(12));
添加(新时间戳(“7”),新日期时间().plusHours(13));
添加(新的时间戳(“2”),新的日期时间().plusHours(14));
添加(新的时间戳(“3”),新的日期时间().plusHours(15));
添加(新的时间戳(“4”),新的日期时间().plusHours(16));
添加(新的时间戳(“8”),新的日期时间().plusHours(17));
添加(新的时间戳(“9”),新的日期时间().plusHours(18));
添加(新的时间戳(“10”),新的日期时间().plusHours(19));
List newList=移除的副本(列表);
}
如何从列表中删除重复的时间戳id,并仅返回该id的最新时间戳时间

我尝试使用以下方法,但已经遇到了无法正确删除ID的问题

public static List<Object> removeDuplicates(List<Timestamp > l) {
        // ... the list is already populated
        Set<Timestamp > s = new TreeSet<Timestamp >(new Comparator<Timestamp >() {

            @Override
            public int compare(Timestamp o1, Timestamp o2) {
                if (o1.getId().equalsIgnoreCase(o2.getId())) {
                    return 0;
                } else {
                    return 1;
                }
            }
        });
        s.addAll(l);
        return Arrays.asList(s.toArray());
    }
移除的公共静态列表副本(列表l){
//…列表已填充
设置s=新树集(新比较器(){
@凌驾
公共整数比较(时间戳o1,时间戳o2){
if(o1.getId().equalsIgnoreCase(o2.getId())){
返回0;
}否则{
返回1;
}
}
});
s、 阿道尔(l);
返回Arrays.asList(s.toArray());
}

您需要实现
设置
界面,然后使用
堆栈

  • Set将帮助您删除重复项
  • 堆栈的
    pop
    将帮助您将最新的元素添加到堆栈中
  • 最好是使用:

    //实现Comparator的公共类
    // ...
    //公共图书馆{
    // ...
    TreeSet-ourSet=新树集(本);
    公共int比较(Bean o1,
    豆角(氧气){
    返回o1.getDateTime().compareTo(o2.getDateTime());
    }
    

    现在使用
    .first()
    获取最低的元素,使用
    .last()
    获取最高的元素。其他可能感兴趣的方法有
    较低的()
    较高的()
    pollFirst()
    pollLast()
    。希望有帮助。

    希望您需要获取时间戳列表,如果两个时间戳具有相同的id,则需要获取最新的时间戳。 使用Java8

     private static List<Timestamp> removeDuplicates(List<Timestamp> list) {
            Map<String, Timestamp> collect = list
                    .stream()
                    .collect(Collectors.toMap(Timestamp::getId,
                            v -> v,
                            (u, v) -> u.getTimestamp().compareTo(v.getTimestamp()) > 0 ? u : v));
           return new ArrayList<>(collect.values());
        }
    
    private static List removeDuplicates(列表列表){
    地图收集=列表
    .stream()
    .collect(Collectors.toMap)(时间戳::getId,
    v->v,
    (u,v)->u.getTimestamp().compareTo(v.getTimestamp())>0?u:v);
    返回新的ArrayList(collect.values());
    }
    
    为什么不首先将项目存储在
    集合
    中?另外,不要将
    列表
    转换为
    列表
    集合
    的语义是,只有在不存在的情况下才添加项目-这与我们的要求不同,即最后添加的具有相同ID的时间戳应该存在。
     private static List<Timestamp> removeDuplicates(List<Timestamp> list) {
            Map<String, Timestamp> collect = list
                    .stream()
                    .collect(Collectors.toMap(Timestamp::getId,
                            v -> v,
                            (u, v) -> u.getTimestamp().compareTo(v.getTimestamp()) > 0 ? u : v));
           return new ArrayList<>(collect.values());
        }