Java 8 получить список из карты на основе условия - PullRequest
0 голосов
/ 19 октября 2018

У меня есть Item класс:

public class Item {
    String name;
    double price;
    // Getters & Setters
}

Теперь у меня есть карта как Map<String, List<Item>> map;, эта карта содержит название элемента и соответствующий список элементов с таким же именем.

Теперь я хочу узнать весь список элементов, соответствующих критерию фильтра.

Вот мой фильтр List<String> filter, в основном он содержит весь список имен, которые мне нужно отфильтровать по карте, и получить всевыбранные элементы в качестве окончательного списка.

List<Item> output = new ArrayList<>();
        filter.forEach(item -> {
            List<Item> list = map.get(item);
            if (list != null) {
                output .addAll(list);
            }
        });

Здесь я использую лямбда-выражение, теперь есть ли способ еще больше упростить этот код, используя Lamda или ссылку на метод?

1 Ответ

0 голосов
/ 19 октября 2018

Я бы поточил список фильтров, отобразил бы его на значения в списке и затем собрал бы их как единый:

List<Item> result = 
    filter.stream()
          .flatMap(f -> map.getOrDefault(f, Collections.emptyList).stream())
          .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...