Java 更改集合中的值<&燃气轮机;
我有一个包含项目对象的集合:Java 更改集合中的值<&燃气轮机;,java,collections,Java,Collections,我有一个包含项目对象的集合:set 类项有一个返回字符串的方法getName()。 我想使用以下方法将Set转换为Set Item#getName() 有没有比使用forEach更好的方法 itemSet.stream().map(Item::getName).collect(Collectors.toSet()) 使用Java流对此进行解释: .stream从集合中一个接一个地提取每个项目。请参阅Oracle发布的这篇文章 .map对集合中的每个对象流调用指定的方法(getName)。此项
set
类项有一个返回字符串的方法getName()
。
我想使用以下方法将Set
转换为Set
Item#getName()
有没有比使用forEach更好的方法
itemSet.stream().map(Item::getName).collect(Collectors.toSet())
使用Java流对此进行解释:
从集合中一个接一个地提取每个项目。请参阅Oracle发布的这篇文章.stream
对集合中的每个对象流调用指定的方法(.map
)。此项的输出是每个项的name属性,显然是方案中的getName
字符串
对象
捕获每个名称输出,并将它们放入一个新的.collect
对象中。这个新的集合
在这个代码完成时返回集合
Set result=itemSet.stream().map(item->item.getName()).collect(Collectors.toSet())
应该解决这个问题。谢谢:)方法引用(.map(Item::getName)
)可能比lambda(.map(Item->Item.getName())
)更好,但任何一种方法都有效。亲爱的投票人,请在投票时留下批评。这可能是一个看似简单的问题,但(a)简单的问题在堆栈溢出上肯定是允许的,并且(b)它导致了关于Java流的问题。@basil bourque感谢您充实了我的答案-非常简洁地解释了这些步骤!好吧,让我们用一个漂亮的图表再进一步。受那篇链接文章的启发。我真的很喜欢这个答案和图表。但是,我认为这些概念是错误的。从集合中提取项目的不是.stream()
方法,而是流的终端操作(在本例中是收集
)。所有管道都是惰性的,这意味着只有在需要时才调用中间操作的参数。从概念上讲,当collect
触发管道的开始时,从源中提取元素,然后按顺序应用中间操作(当它对应时),最后应用终端操作。