Как найти объект, содержащий значение в списке его полей, с помощью Stream ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Как найти объект, содержащий значение в списке его полей, с помощью Stream

Сообщение Anonymous »

Код: Выделить всё

public class User {

private int id;

Set
 phones = new HashSet();

public Set setPhones(Set phones) {
return this.phones = phones;
}

public Collection getPhones() {
return this.phones;
}

Код: Выделить всё

public class Phone {

private int id;

private String value;

public String getValue() {
return value;
}
есть два класса. Вам нужно найти пользователя, который содержит определенный номер телефона. Пробовал переделать на потоке, но не получается.
Обычный код:

Код: Выделить всё

public User findByPhone1(String number) {
var users = findAll();
User user = null;
if (users != null) {
for (User u : users) {
var phones = u.getPhones();
if (phones != null) {
for (Phone p : phones) {
if (p.getValue().equals(number)) {
user = u;
}
}
}
}
}
return user;
}
Я хотел сделать что-то подобное, но это невозможно:

Код: Выделить всё

public User findByPhone(String number) {
var list = findAll();
return var user = list.stream()
.filter(u -> u.getPhones().stream()
.filter(p -> p.getValue().equals(number)))
.findFirst();
}
Есть ли другие варианты?

Подробнее здесь: https://stackoverflow.com/questions/700 ... g-a-stream

Вернуться в «JAVA»