首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串流串与整数

串流串与整数
EN

Stack Overflow用户
提问于 2017-06-28 14:13:29
回答 1查看 620关注 0票数 4

我正在学习Stream,在一个这样的实践过程中,我试图通过下面的代码连接两个不同类型的String和Integer流:

代码语言:javascript
复制
Stream<String> fruitStream = Stream.of("Apple", "Mango", "Muskmalon", "Guvava");
Stream<Integer> vegetablesStream = Stream.of(1, 2, 3, 4);

Stream<String> mixStream = Stream.concat(fruitStream, vegetablesStream.map(i -> i.toString()));
mixStream.forEach(System.out :: println);

它正常工作,给了我想要的结果。

然后我尝试使用方法引用:

代码语言:javascript
复制
Stream<String> mixStream = Stream.concat(fruitStream, vegetablesStream.map(Integer :: toString));

它开始抛出错误:

代码语言:javascript
复制
Wrong 1st argument type. Found: 'java.util.stream.Stream<java.lang.String>', required: 'java.util.stream.Stream<? extends T>'
concat (java.util.stream.Stream<? extends T>, java.util.stream.Stream<? extends T>) in Stream cannot be applied to (java.util.stream.Stream<java.lang.String>, java.util.stream.Stream<R>)   
reason: No compile-time declaration for the method reference is found

当我用String ::ValueOf替换我的方法引用时,它运行得很好:

代码语言:javascript
复制
Stream<String> mixStream = Stream.concat(fruitStream, vegetablesStream.map(String :: valueOf));

我无法理解为什么Integer ::toString失败而String ::valueOf传递了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-28 14:40:47

错误消息应该是Ambiguous method reference: both toString() and toString(int) from the type Integer are eligible。这是因为toStringtoString(int)都有资格在这里使用。

这两者都有可能是:

代码语言:javascript
复制
  .map(i -> i.toString(i))
  .map(i -> i.toString())      

而且它工作得很好,因为String::valueOf没有这样的重载方法,因此编译器对此很满意。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44805016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档