#java #filter #java-8 #java-stream
#java #Фильтр #java-8 #java-stream
Вопрос:
У меня есть один простой массив с пользовательским объектом, и я хочу фильтровать с помощью потока java 8.
A[] aArray = new A[3];
A a1 = new A();
a1.setaId(1);
a1.setaName("AName1");
B b1 = new B();
b1.setbId(1);
b1.setbName("BName1");
a1.setB(b1);
aArray[0] = a1;
A a2 = new A();
a2.setaId(2);
a2.setaName("AName2");
B b2 = new B();
b2.setbId(2);
b2.setbName("BName2");
a2.setB(b2);
aArray[1] = a2;
Не могли бы вы, пожалуйста, подсказать, как я могу перейти к потоку фильтра в массиве, А НЕ В ArrayList
В принципе, я хочу фильтровать только со значением «BName2».
Комментарии:
1. Размер вашего массива должен быть 2. Таким образом, объявление должно быть изменено следующим образом:
A[] aArray = new A[2];
2. В качестве отступления определите себе несколько хороших конструкторов, чтобы вы могли сделать просто
A[] aArray = new A[] { new A(1, "AName1", new B(1, "BName1")), new A(2, "AName2", new B(2, "BName2")), null };
.
Ответ №1:
Если вы сохраняете уникальный элемент в массиве, вы можете использовать следующий подход
Если объект уникален
A aWithValidString = Arrays.stream(aArray)
.filter(a -> "BName2".equals(a.getB().getbName()))
.finAny().orElse(null);
Если у вас есть несколько объектов в массиве со строкой «Bname2», вы можете использовать приведенный ниже код
List<A> filteredObject = Arrays.stream(aArray)
.filter(a -> "BName2".equals(a.getB().getbName()))
.collect(Collectors.toList());
И список итераций
Комментарии:
1. Вызов
Optional.get
всегда является ошибкой.2. @BoristheSpider исправлено, спасибо 🙂
3.
.orElse(null)
всегда вызывает у меня депрессию… СOptional
зачем вы вообще хотите использоватьnull
? Вы можете просто вернутьOptional
и все — нет смысла сопоставлять его с null