потоки java 8 копируют определенные объекты из карты в список

#java-8 #java-stream

#java-8 #java-stream

Вопрос:

Ищу альтернативный код в Java8 / streams.
Я хочу скопировать определенные значения с карты в список, используя предопределенный массив ключей.

Код для выполнения этой задачи в Java 7 выглядит следующим образом:

 public List<Fruit> getFruitList(Map<String, Fruit> fruitMap) {
    final String[] fruitNames = { "apple", "banana", "mango" };
    final ArrayList<Fruit> fruitList = new ArrayList<>(fruitNames.length);
    for (int i = 0; i < fruitNames.length; i  ) {
        final String fruitName = fruitNames[i];
        final Fruit fruit = fruitMap.get(fruitName);
        if (fruit != null) {
            fruitList.add(fruit);
        }
    }
    fruitList.trimToSize();
    return fruitList;
}
  

Ответ №1:

Я сам нашел возможное решение:

 return Stream.of(fruitNames)
             .map(fruitMap::get)
             .filter(Objects::nonNull)
             .collect(Collectors.toList());
  

Комментарии:

1. Возможно, вы захотите использовать Objects.NonNull . Хорошая альтернатива чистому лямбда-коду.