Java 8 类型流中的方法收集(收集器<;?super Dish,A,R>;);盘子>;不适用于参数(收集器<;CharSequence,捕获#3-of?,字符串>;)
对于下面开发的Java8代码,我得到以下错误。在本例中,尝试将菜名的所有名称合并到单个变量中。通过下面的代码,我得到了这个方法collect(Collector您只能加入Java 8 类型流中的方法收集(收集器<;?super Dish,A,R>;);盘子>;不适用于参数(收集器<;CharSequence,捕获#3-of?,字符串>;),java-8,Java 8,对于下面开发的Java8代码,我得到以下错误。在本例中,尝试将菜名的所有名称合并到单个变量中。通过下面的代码,我得到了这个方法collect(Collector您只能加入CharSequences,因为Collector::joining命令,另一方面,您的流是流(在第3行),它将与定义不匹配,也不会编译-这就是您得到的。您得到了Lombok注释@Data,它会自动创建一个toString()方法,因此您可能希望第3行可以工作。toString()方法只有在您将其添加到字符串时才会自动调用(即文
CharSequence
s,因为Collector::joining
命令,另一方面,您的流是流
(在第3行),它将与定义不匹配,也不会编译-这就是您得到的。您得到了Lombok注释@Data
,它会自动创建一个toString()
方法,因此您可能希望第3行可以工作。toString()
方法只有在您将其添加到字符串时才会自动调用(即文字字符串或另一个声明为字符串的变量)。对于其他用途,需要显式调用toString()
。因此,第3行应为:
String shortMenu1 = Dish.menu.stream().map(Dish::toString).collect(joining()); //line-3
我们如何解决这个问题?我需要什么样的准确更改?@Sayali但是你已经通过
Dish.menu.stream().map(Dish::getName.collect)(joining());
如果这不是你需要的,可以解释一下吗?
String shortMenu = Dish.menu.stream().map(Dish::getName).collect(joining());
System.out.println(shortMenu);
String shortMenu1 = Dish.menu.stream().collect(joining()); //line-3
String shortMenu1 = Dish.menu.stream().map(Dish::toString).collect(joining()); //line-3