#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 . Хорошая альтернатива чистому лямбда-коду.