Возвращаемая строка из лямбда-выражения stream (). Filter () - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть что-то вроде этого, и я хочу получить строку в результате

    List<Profile> profile;
    String result = profile
                       .stream()
                       .filter(pro -> pro.getLastName().equals("test"))
                       .flatMap(pro -> pro.getCategory())

getCategory () должен возвращать строку, но не уверен, что я должен использовать для возврата строки, я пробовал несколько вещей, но все работало

Есть идеи?

Спасибо

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Есть несколько решений в зависимости от того, что вы пытаетесь сделать. Если у вас есть один целевой профиль, для которого вы хотите получить категорию, вы можете использовать findFirst или findAny, чтобы получить нужный профиль, а затем получить категорию из полученного Optional.

Optional<String> result = profile.stream()
                                .filter(pro -> pro.getLastName().equals("test"))
                                .map(Profile::getCategory)
                                .findFirst(); // returns an Optional

Обратите внимание, что findFirst возвращает Необязательно . Он учитывает возможность того, что у вас на самом деле нет таких, которые соответствуют вашим критериям, таким образом, чтобы вы могли справиться с этим изящно.

В качестве альтернативы, если вы пытаетесь объединить категории всех профилей с фамилией «test», тогда вы можете использовать .collect(Collectors.joining()) для накопления строки.

List<Profile> profile; // contains multiple profiles with last name of "test", potentially
String result = profile.stream()
                       .filter( pro -> pro.getLastName().equals("test"))
                       .map(Profile::getCategory)
                       .collect(Collectors.joining(", ")); // results in a comma-separated list
0 голосов
/ 07 ноября 2018

Вы можете использовать в своем потоковом методе collect (Collectors.joining ()), который будет собирать ваш Stream как String. Под капотом будет использоваться класс StringJoiner: https://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html

Класс коллекционеров java doc: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#joining--

Я думаю, это поможет вам

0 голосов
/ 07 ноября 2018
List<Profile> profile;
String result = profile.stream()
                       .filter(pro -> pro.getLastName().equals("test"))
                       .map(pro -> pro.getCategory())
                       .findFirst()
                       .orElse(null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...