等效的lambda表达式,用于获取列表中每个对象的属性

时间:2018-10-24 18:10:29

标签: java list lambda java-8

在Java中,此for循环的等效lambda表达式是什么?
我只想一行打印列表对象的名称。

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

我尝试了以下操作,但是没有任何运气,我只得到了流的标识哈希码。 Arrays.asList(dataSet.getAttributeList().stream().map(p -> p.getName()));

2 个答案:

答案 0 :(得分:4)

假设您的name属性是String,请继续使用Stream管道。使用内置的Collector收集名称,该Collector将值与每个元素之间的分隔符连接在一起:Collectors.joining

  

返回一个Arrays.asList,它按遇到顺序连接由指定定界符分隔的输入元素。

您可以删除不必要的System.out.println( dataSet.getAttributeList().stream() .map(p -> p.getName()) .collect(Collectors.joining(" ")) ); ,但这还是不正确的;它需要一个数组,而不是流或字符串作为参数。

.map(Attribute::getName)

您还可以选择使用方法引用代替lambda表达式:

;

答案 1 :(得分:1)

假设您已覆盖toString,则可以使用:

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

如果还没有:

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