gpt4 book ai didi

java - 在一个流中过滤和设置()

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:54 26 4
gpt4 key购买 nike

因此,我正在使用一些示例代码来尝试找出下面的逻辑。它只是一个大型 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 不匹配的 obj。我的下一个目标是在匹配的对象上 set id(不是 carId)。

基本上,如果 obj1.carId == obj2.carId THEN set obj1.id = obj2.id

我的问题是我不知道如何在同一流中执行此操作。是否可以?我不禁认为此时需要迭代器?

最佳答案

不要在一个流中执行这两个操作。这是一种非常糟糕的风格。

首先收集数据。然后改变元素。像这样的东西:

Map<obj2, Optional<obj1>> map = 
obj2Arr.stream()
.collect(toMap(identity(), o2 -> obj1Arr.stream()
.filter(o1 -> o1.getCarId().equals(o2.getCarId()))
.findAny()));

map.forEach((o1, optO2) -> optO2.ifPresent(o2 -> o1.setId(o2.id)));

否则,您可以只使用嵌套的 for-each 循环。

关于java - 在一个流中过滤和设置(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54555097/

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