【发布时间】:2019-02-06 13:45:28
【问题描述】:
所以我有一些我正在使用的示例代码来尝试找出下面的逻辑。它只是一个大的 main 方法和两个 POJO,但它会运行。我正在调试以获取终止点的值。
public class Main {
public static void main(String[] args) {
obj1 obj1 = new obj1();
obj1 obj12 = new obj1();
obj2 obj2 = new obj2();
obj2 obj22 = new obj2();
obj1.id = 123L;
obj1.carId = 1234L;
obj12.id = 123L;
obj12.carId = 1234L;
obj2.carId = 1234L;
obj22.carId = 12345L;
ArrayList<obj1> obj1Arr = new ArrayList<>();
ArrayList<obj2> obj2Arr = new ArrayList<>();
obj1Arr.add(obj1);
obj1Arr.add(obj12);
obj2Arr.add(obj2);
obj2Arr.add(obj22);
List<obj2> newCarList= obj2Arr.stream()
.filter(anObjOf2 -> obj1Arr
.stream()
.anyMatch(carReg -> carReg.getCarId().equals(anObjOf2.getCarId())))
.collect(Collectors.toList());
}
}
POJO1:
public class obj1 {
Long id = null;
Long carId = null;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getCarId() {
return carId;
}
public void setCarId(Long carId) {
this.carId = carId;
}
}
POJO2:
public class obj2 {
Long id = null;
Long carId = null;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getCarId() {
return carId;
}
public void setCarId(Long carId) {
this.carId = carId;
}
}
如您所见,我正在流式传输并过滤掉与carId 不匹配的任何objs。我的下一个目标是在匹配的对象上使用 set id(不是 carId)。
基本上,如果obj1.carId == obj2.carId THEN set obj1.id = obj2.id。
我的问题是我不知道如何在同一个流中执行此操作。是否可以?我不禁认为此时需要一个迭代器?
【问题讨论】:
-
请详细说明这部分问题... 在obj2Arr中的objs上设置对应的id。
-
这对我来说不是很清楚
My next goal is to then set the corresponding id on the objs in obj2Arr.并且在流中您正在过滤在obj1Arr中具有相同carid的对象 -
我已经更新了它..希望它很清楚。基本上,
if obj1.carId == obj2.carId然后set obj1.id = obj2.id。这有意义吗? -
@notAChance 不,因为它已经设置好了......这就是你能够比较它的方式......不是吗?
-
我认为混乱来自过度使用
id。carId和id是不同的。我正在比较carId,匹配时,我想要obj2.setId(obj1.getId());
标签: java collections java-8 java-stream