我有一个带有Person对象的数据库表。我的网络服务接收一个Person对象列表来更新这个Person表。我的应用程序现在包含两个列表:
List<Person> current;
List<Person> updated;
我想遍历这些列表,并创建一个新列表,用于更新Person表。
Person {
String fName;
String lName;
String age;
String email;
}
fName和lName用于识别现有记录。下面是一个例子。
现在的
乔,布洛格斯,18岁,joe@me.com
简,布洛格斯,21岁,jane@me.com
弗洛,布洛格斯,25岁,flo@me.com
新的
乔,布洛格斯,18岁,乔_bloggs@me.com
简,布洛格斯,21岁,jane@me.com
弗洛,布洛格斯,90岁,flo@me.com
用于更新数据库的记录
Joe, Bloggs,18,joe_bloggs@me.com
Flo, Bloggs,90,flo@me.com
private newList(List<Person> current, List<Person> new) {
List<Person> toUpdate = new ArrayList();
for(Person person : new) {
Person found = current.stream().filter(p->p.equals(person)).findFirst().orElse(person);
if (found.age!=person.age OR found.email!=person.email) {
toUpdate.add(person);
}
return toUpdate;
}
除非您在Person类中重写equals方法来实际检查字段,否则您需要检查对象的值,而不是引用。这里有一个例子,假设lname和fname用于标识记录。此外,对于相同的记录,我们不必将它们添加到列表中,这样我们的筛选方法将返回一个空对象,以处理我们可以使用可选的。
更有效的方法是创建一个HashMap,将fname和lname作为键,将人对象作为值,这样你就不必一次又一次地过滤,从而将运行时间减少了n倍。
private newList(List<Person> old, List<Person> updated) {
List<Person> toUpdate = new ArrayList<Person>();
for(Person person : old) {
Optional<Person> found =
updated
.stream()
.filter(p-> p.fname == person.fname
&& p.lname == person.lname &&
(p.email != person.email
|| p.age != person.age)).findFirst();
if(found.isPresent()) {
Person f = found.get();
toUpdate.add(f);
}
}
return toUpdate;
}
问题内容: 我有两个清单,和。我需要的物品不在其中。 我只想得到[4,5]-l1中只有新值。 我可以不用迭代吗? 问题答案: 简短的回答,是的:,但这不会保持秩序。 长答案,不,因为在内部CPU总是会迭代。但如果你使用的是迭代将进行高度优化,并会快那么你的列表解析(更不用说检查会员是 多 快带套然后列出)。
我有一个列表,我想创建一个名为的扩展。 我不想覆盖,因此不能使用append、extend或insert。我想知道是否有一个快速的方法来完成这项工作(比使用理解列表或Deep.copy更快)
我正在尝试使用Java8流来组合列表。如何从两个现有列表中获得“对称差异列表”(只存在于一个列表中的所有对象)。我知道如何获取intersect列表,也知道如何获取union列表。 示例代码:
问题内容: 我正在尝试创建一个包含2个列表并返回仅具有两个列表差异的列表的函数。 例: 结果应打印 到目前为止的功能: 第一个for循环将其排序,第二个将重复项删除。问题是结果 不是,所以不能完全删除重复项吗?我可以添加些什么来做到这一点。我不能使用任何特殊模块,.sort,set或其他任何东西,而只是基本地循环。 问题答案: 基本上,您希望将一个元素添加到新列表中(如果一个元素存在而另一个元素中
问题内容: 我有两个列表,其中包含许多相同的项目,包括重复的项目。我想检查第一个列表中的哪些项不在第二个列表中。例如,我可能有一个这样的列表: 还有一个像这样的列表: 比较这两个列表,我想返回第三个列表,如下所示: 我目前正在使用一些我之前确定的糟糕代码,我可以肯定它甚至无法正常工作,如下所示。 我怎样才能更好地完成这项任务? 问题答案: 您没有指定订单是否重要。如果没有,则可以在> = Pyth