我有两个pojo:
class Object1 {
public Object1(String id) {
this.id = id;
}
private String id;
private Integer value1;
private Integer value2;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Integer getValue1() {
return value1;
}
public void setValue1(Integer value1) {
this.value1 = value1;
}
public Integer getValue2() {
return value2;
}
public void setValue2(Integer value2) {
this.value2 = value2;
}
}
public class Object2 {
private String id;
private Integer value;
public Object2(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
}
我有两个对象的列表,其中的对象具有相同的id。我想通过设置两个对象id匹配的object2 value字段中的值,根据l2中对象的值来设置列表l1中对象的value2。
import java.util.Arrays;
import java.util.List;
public class Main{
public static void main(String[] args) {
Object1 o1_1 = new Object1("asdf");
Object1 o1_2 = new Object1("qwert");
List<Object1> l1 = Arrays.asList(o1_1, o1_2);
Object2 o2_1 = new Object2("asdf");
o2_1.setValue(123);
Object2 o2_2 = new Object2("qwert");
o2_2.setValue(456);
List<Object2> l2 = Arrays.asList(o2_1, o2_2);
l1.forEach(object1 -> l2.stream()
.filter(object2 -> object1.getId().equals(object2.getId()))
.forEach(object2 -> object1.setValue2(object2.getValue())));
}
}
如何使用java流api有效地做到这一点?
这个解决方案正确吗?复杂度为o(n)²) 正确的?有没有更有效的方法?
1条答案
按热度按时间b4wnujal1#
如果您关心性能,可以将其中一个列表转换为以id为键的查找Map,然后更新另一个列表。它的复杂性是o(n)。
您可以这样创建查找Map:
或使用流:
现在,您可以在Map的帮助下迭代第一个列表并用值更新元素。
或者,如果
Object2
只有id
以及value
,你甚至可以创建一个map<id, value>
: