gpt4 book ai didi

java-8 - Stream 类型中的方法 collect(Collector) 不适用于参数 (Collector)

转载 作者:行者123 更新时间:2023-12-05 04:04:19 29 4
gpt4 key购买 nike

对于下面开发的 Java 8 代码,我收到以下错误。在此示例中,尝试将 Dish Name 的所有名称连接到一个变量中。使用下面的代码我得到了这个 "The method collect(Collector<? super Dish,A,R>) in the type Stream<Dish> is not applicable for the arguments (Collector<CharSequence,capture#3-of ?,String>)" .

Dish.java

@Builder
@Data
@AllArgsConstructor
public class Dish {
public enum Type { MEAT, FISH, OTHER }

private final String name;
private final boolean vegetarian;
private final int calories;
private final Type type;

public static final List<Dish> menu =
Arrays.asList( new Dish("pork", false, 800, Dish.Type.MEAT),
new Dish("beef", false, 700, Dish.Type.MEAT),
new Dish("chicken", false, 400, Dish.Type.MEAT),
new Dish("french fries", true, 530, Dish.Type.OTHER),
new Dish("rice", true, 350, Dish.Type.OTHER),
new Dish("season fruit", true, 120, Dish.Type.OTHER),
new Dish("pizza", true, 550, Dish.Type.OTHER),
new Dish("prawns", false, 400, Dish.Type.FISH),
new Dish("salmon", false, 450, Dish.Type.FISH));
}

这里是主要方法

String shortMenu = Dish.menu.stream().map(Dish::getName).collect(joining());
System.out.println(shortMenu);

String shortMenu1 = Dish.menu.stream().collect(joining()); //line-3

最佳答案

您已经获得了 Lombok 注释 @Data,它会自动创建一个 toString() 方法,因此您可能希望第 3 行能够正常工作。 toString() 方法仅在您将其添加到字符串(即文字字符串或声明为 String 的另一个变量)时自动调用。对于其他用途,您需要显式调用 toString()。因此,第 3 行应该是:

String shortMenu1 = Dish.menu.stream().map(Dish::toString).collect(joining()); //line-3

关于java-8 - Stream<Dish> 类型中的方法 collect(Collector<? super Dish,A,R>) 不适用于参数 (Collector<CharSequence,capture#3-of ?,String>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52719766/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com