代码之家  ›  专栏  ›  技术社区  ›  Coder-Man

您可以收集(joining())而不映射到字符串吗?

  •  2
  • Coder-Man  · 技术社区  · 8 年前

    我正在阅读Java 8的动作,作者说如果你有一个重写ToSstring方法的类,你不需要在收集(连接())时将流映射到字符串。一个例子:

        public static void main(String... args) {
            List<Person> people =
            Arrays.asList(
                    new Person(23, "Paul"),
                    new Person(23, "John"),
                    new Person(23, "Greg"),
                    new Person(24, "Greg"),
                    new Person(25, "Paul")
            ); // Person overrides toString
    
            String peopleString = people
                    .stream()
                    .collect(Collectors.joining());
    
            System.out.println(peopleString);
    
        }
    

    但是,这不起作用,只有这样:

    String peopleString = people
                    .stream()
                    .map(Person::toString)
                    .collect(Collectors.joining());
    

    好的,那么这本书是错的?另外,他为什么说(我稍微改了一下措辞):

    还请注意,如果一个类有一个ToString方法返回一个字符串,那么您将获得相同的结果,而无需使用提取名称的函数映射原始流。

    当每个对象都应该继承时 toString Object ?

    1 回复  |  直到 8 年前
        1
  •  7
  •   Coder-Man    8 年前

    无论这本书说的是什么都是错误的,你的解释也是正确的(除非这一点完全不同,而且你没有理解)

    people.stream()
    

    将生成 Stream<People> ,而 Collectors.joining 定义如下:

    public static Collector<CharSequence, ?, String> joining()
    

    显然,这不能像 Person 不是的实例 CharSequence .