在Java中,此for循环的等效lambda表达式是什么?
我只想一行打印列表对象的名称。
for(Attribute attr : dataSet.getAttributeList()){
System.out.print(attr.getName() + " ");
}
我尝试了以下操作,但是没有任何运气,我只得到了流的标识哈希码。
Arrays.asList(dataSet.getAttributeList().stream().map(p -> p.getName()));
答案 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));