java字符串+join_java – 你可以收集(join())而不映射到字符串吗?

我正在阅读java 8,并且作者说如果你有一个覆盖toString方法的类,那么在进行collect(joined())时你不需要将流映射到字符串.一个例子:

public static void main(String... args) {

List people =

Arrays.asList(

new Person(23, "Paul"),

new Person(23, "John"),

new Person(23, "Greg"),

new Person(24, "Greg"),

new Person(25, "Paul")

); // Person overrides toString

String peopleString = people

.stream()

.collect(Collectors.joining());

System.out.println(peopleString);

}

但是,这不起作用,只有这样:

String peopleString = people

.stream()

.map(Person::toString)

.collect(Collectors.joining());

工作,所以这本书错了吗?此外,为什么他说(我改变了一点措辞):

Also note that if a class had a toString method returning a string, you’d obtain the same result without needing to map over the original stream with a function extracting the name.

当每个对象都应该从Object继承toString?

解决方法:

无论这本书说错了,你的解释是对的(除非这一点完全不同,你没有得到它)

people.stream()

将生成Stream< People>,而Collectors.joining的定义为:

public static Collector joining()

显然这不能用,因为Person不是CharSequence的实例.

标签:java,java-8,java-stream

来源: https://codeday.me/bug/20191008/1874382.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值