【发布时间】:2019-12-13 03:15:36
【问题描述】:
我想创建一个在流中打印信息的方法。请看一下我现有的记录器方法。 方法参数必须是通用的,就像我的示例字符串和整数一样。 该方法应该返回原始对象,在我的例子中是字符串。 谁能告诉我我目前的方法有什么问题?
提前非常感谢!
查看记录器方法
Stream<String> stream = Stream.of("A", "BC", "XYZ");
stream.map(t -> logger(t.length()))
.map(t-> logger(t.substring(0, 2)))
.collection(Collectors.toList());
public static <T> T logger(T t) {
System.out.println(t);
return t;
}
错误:无法推断映射(函数)的类型参数
【问题讨论】:
-
logger(t.length())将返回整数,因此在您的第二张地图中,您将拥有整数,并且您不能从整数调用substring。 -
您将
t.length()传递给您的logger函数,这是一个int,所以您的T是Integer。 -
旁注:为什么应该记录一些东西的方法也返回一些值?
-
@michalk 我假设他正在尝试完成类似
peek(System.out::println)的事情,但可以保证它会运行,并且同时指定T的一些Function而不仅仅是T。跨度> -
为什么要记录任何类型? Java 中的几乎所有内容都可以轻松转换为
String。例如让logger()获取String,然后调用logger(String.valueOf(t.length()))。
标签: java java-8 functional-programming java-stream