Эквивалентное лямбда-выражение, чтобы получить свойство каждого объекта в списке - PullRequest
0 голосов
/ 24 октября 2018

Какое эквивалентное лямбда-выражение для цикла for в Java?
Я просто хочу напечатать в строке имена объектов списка.

for(Attribute attr : dataSet.getAttributeList()){
            System.out.print(attr.getName() + " ");
        }

Я попробовал следующее, но без какой-либо удачи, я получил только хэш-код идентификатора потока.Arrays.asList(dataSet.getAttributeList().stream().map(p -> p.getName()));

Ответы [ 2 ]

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

Предполагая, что вашим атрибутом имени является String, продолжайте работу с вашим Stream конвейером.Соберите имена, используя встроенный Collector, который объединяет значения с разделителем между каждым элементом: Collectors.joining:

Возвращает Collector, который объединяетэлементы ввода, разделенные указанным разделителем, в порядке совпадения.

Вы можете удалить ненужные Arrays.asList, что в любом случае неверно;в качестве аргумента он принимает массив, а не поток или строку.

System.out.println(
    dataSet.getAttributeList().stream()
        .map(p -> p.getName())
        .collect(Collectors.joining(" "))
);

Вы также можете использовать ссылку на метод вместо лямбда-выражения:

.map(Attribute::getName)
0 голосов
/ 24 октября 2018

Если вы переопределили toString, вы можете получить весь объект, используя:

dataSet.getAttributeList().forEach(System.out::println);

Если вы не сделали:

dataSet.getAttributeList().forEach(Attribute::getName));
...