gpt4 book ai didi

java-8 - 通过流连接字符串

转载 作者:行者123 更新时间:2023-12-01 07:52:37 25 4
gpt4 key购买 nike

我正在尝试加入一个名字列表:

List<String> names;
names = books.stream()
.map( b -> b.getName() )
.filter( n -> ( (n != null) && (!n.isEmpty()) ) )
.collect(Collectors.joining(", "));

这不编译说:

incompatible types. inference variable R has incompatible bounds



所以经过一番研究,似乎我误解了一些东西。我以为 .map( b -> b.getName() )将类型返回/更改为字符串,似乎那里有问题。如果我使用 .map(Book::getName)相反,我仍然收到错误消息,但我可能是 don't fully understand the difference .

然而,这并没有提示:
List<String> names;
names = books.stream()
.map( b -> b.getName() )
.map( Book::getName )
.filter( n -> ( (n != null) && (!n.isEmpty()) ) )
.collect(Collectors.joining(", "));

有人可以解释我为什么吗?关于 .map( b -> b.getName() ) 之间差异的一些教学解释和 .map(Book::getName)也很感激,因为我认为我没有做对。

最佳答案

joining(", ")收藏家会收藏和加入 所有字符串 成单个字符串 使用给定的分隔符。 collect的返回类型在这种情况下是 String ,但您试图将结果分配给 List .如果要将字符串收集到列表中,请使用 Collectors.toList() .

如果您有 Book 的收藏实例,那么映射一个流 Book 就足够了s 到 String 的流s 一次。

lamdba 和方法引用之间的区别

  • 一个 lamdba 表达式可以写成一个块,包含多个操作:
    b -> {
    // here you can have other operations
    return b.getName();
    }

    如果 lambda 有单一操作,则可以缩短:
    b -> b.getName()
  • 方法引用只是具有单个操作的 lambda 的“捷径”。这边走:
    b -> b.getName()

    可以替换为:
    Book::getName

    但如果你有一个这样的 lambda:
    b -> b.getName().toLowerCase()

    您不能使用对 getName 的引用方法,因为您正在额外调用 toLowerCase() .
  • 关于java-8 - 通过流连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42086555/

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