У меня проблема с фильтрами и сеттером, как указано ниже.
У меня есть свой пользовательский класс A
, и у меня есть список A как list
, Я хочу перебрать список и отфильтровать его с условием a1 = "a2"
и хочу установить атрибуты a2
в своем пользовательском сообщении. Я могу сделать с потоком, фильтровать, отображать и собирать функции Java 8
. Я уже упоминал код для того же самого.
list.stream().filter(a -> a.getA1().equalsIgnoreCase("a2")).map(a -> a.toBuilder().a2("New a2 value")).collect(Collectors.toList());
Когда я пытаюсь снова напечатать тот же список, но этот атрибут там не обновляется.
Опять же, когда я присваиваю это выражение списку и пытаюсь напечатать, это дает мне 1 отфильтрованную запись с обновленным значением. Но это не обновляет мой фактический список.
Может кто-нибудь, пожалуйста, подскажите мне?
@Builder(toBuilder = true)
@Data
class A {
String a1;
String a2;
String a3;
A(String b1, String b2, String b3) {
this.a1 = b1;
this.a2 = b2;
this.a3 = b3;
}
}
class Main {
public static void main(String[] args) {
A obj1 = new A("a1", "b1", "b1");
A obj2 = new A("a2", "b2", "b2");
A obj3 = new A("a3", "b3", "b3");
A obj4 = new A("a2", "b4", "b4");
A obj5 = new A("a2", "b5", "b5");
var list= new ArrayList<A>();
list.add(obj1);
list.add(obj2);
list.add(obj3);
list.add(obj4);
list.add(obj5);
list.stream().filter(a -> a.getA1().equalsIgnoreCase("a2"))
.map(a -> a.toBuilder()
.a2("New a2 value"))
.collect(Collectors.toList());
}
}
Я пробовал приведенный ниже код, и он работает нормально. Но он обновится на отдельных записях и сломает l oop.
list.stream().filter(a -> a.getA1().equalsIgnoreCase("a2"))
.map(a -> {
a.setA2("New a2 value");
return a;
});