gpt4 book ai didi

Java - 将数据从一个列表传输到另一个列表

转载 作者:行者123 更新时间:2023-11-29 04:25:14 28 4
gpt4 key购买 nike

这是场景,在我的源列表中,它包含所有用户对象。每个用户对象都有 ideventtimestamp。我需要创建一个目标列表以包含所有具有每个 ID 的最新时间戳记录的用户对象。像下面的例子

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.vincent.object.User;

public class Test {
public static void main(String[] args) throws Exception {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
User u1 = new User("1", "55", dateFormat.parse("2017-10-01 10:11:01.111"));
User u2 = new User("1", "105", dateFormat.parse("2017-10-01 10:11:02.111"));
User u3 = new User("2", "55", dateFormat.parse("2017-10-01 10:11:03.111"));
List<User> sources = new ArrayList<>();
sources.add(u1);
sources.add(u2);
sources.add(u3);

List<User> destination = new ArrayList<>();
// I want my destination array only contains following 2 result:
// u2 and u3 from the source
}
}

我该如何解决这个问题?

编辑:这是用户类

import java.util.Date;

public class User {
private String id;
private String reason;
private Date date;

public User(String id, String reason, Date date) {
super();
this.id = id;
this.reason = reason;
this.date = date;
}
// getter setter
}

最佳答案

您可以为此使用 Java 8 流。

public class Test {
public static void main(String[] args) throws Exception {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
User u1 = new User("1", "55", dateFormat.parse("2017-10-01 10:11:01.111"));
User u2 = new User("1", "105", dateFormat.parse("2017-10-01 10:11:02.111"));
User u3 = new User("2", "55", dateFormat.parse("2017-10-01 10:11:03.111"));
User u4 = new User("2", "105", dateFormat.parse("2017-10-01 10:11:04.111"));
List<User> sources = new ArrayList<>();
sources.add(u1);
sources.add(u2);
sources.add(u3);
sources.add(u4);


List<User> destination = sources.stream()
.collect(Collectors.groupingBy(User::getId, Collectors.maxBy(Comparator.comparing(User::getDate))))
.values()
.stream()
.map(o -> o.get())
.collect(Collectors.toList());

System.out.println(destination);
}
}

我在这里 gruping通过 ID 并使用 max 获取用户日期。

输出(显然重写了 User 类上的 toString):

[User{id='1', reason='105', date=Sun Oct 01 10:11:02 BOT 2017},
User{id='2', reason='105', date=Sun Oct 01 10:11:04 BOT 2017}]

关于Java - 将数据从一个列表传输到另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46713351/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com