Отображение списка в Java - PullRequest
0 голосов
/ 23 ноября 2018

В Java 8 я могу отображать потоки с помощью метода map, например,

Stream.of("Hello", "world").map(s -> s.length())

дает мне поток, содержащий целые числа [5, 5].Я пытаюсь сделать то же самое со списками.Я придумал

List<String> list = ...

list.stream().map(s -> s.length()).collect(Collectors.toList())

Это работает, но довольно многословно.Есть ли более краткое решение?В идеале, для списков был бы похожий map метод, но я не нашел ни одного.Итак, есть ли альтернативы?

Ответы [ 2 ]

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

Как можно компактнее

Просто оберните его в свою собственную служебную функцию:

public <T, S> List<S> mapBy(List<T> items, Function<T, S> mapFn) {
    return items.stream().map(mapFn).collect(Collectors.toList());
}

Теперь вы можете просто использовать mapBy(students, Student::getName).Он не становится менее многословным, чем это.

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

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

Практически для выполнения операции над каждым элементом в списке вам необходимо либо выполнить его потоковую передачу, либо выполнить зацикливание, чтобы поток был более лаконичным, чем цикл.для получения дополнительной информации вы можете заменить лямбда-выражение оператором ссылки на метод

list.stream().map(String::length).collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...