当前位置: 首页 > 面试题库 >

您可以在不映射到字符串的情况下收集(joining())吗?

百里金林
2023-03-14
问题内容

我正在阅读Java
8的使用,作者说如果您有一个覆盖toString方法的类,则在执行collect(joining())时不需要将流映射到String。一个例子:

    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方法,则无需使用提取名称的函数在原始流上进行映射即可获得相同的结果。

当每个对象应该继承toStringObject


问题答案:

书中所说的一切都是错误的,而您的解释是正确的(除非要点完全不同,而您没有理解)

people.stream()

将产生Stream<People>,而Collectors.joining定义为:

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

显然,这不能工作,因为Person不是的实例CharSequence



 类似资料:
  • 还要注意,如果一个类有一个返回字符串的toString方法,您将获得相同的结果,而不需要用一个提取名称的函数映射到原始流上。 什么时候每个对象都应该从继承?

  • 我是Mapstruct的新手。我有一个Word对象,它包含一个字符串值和一组它自己,我想把它映射到WordDTO,它包含一个值和一组字符串值。我不知道怎么做。正如我在注释中所说,mapstruct不能映射两个对象是有道理的,但如果它有帮助,我将错误放在下面: 我为映射实现了这个接口: 谢谢你的帮助。

  • 我用了这段代码并运行,但没有输出出来不知道为什么? 但如果正在使用s=“”;则也没有输出。 但是当我使用s=“”;那么输出就来了,为什么会这样呢?

  • 为什么它抛出一个错误?任何帮助都将不胜感激 编辑:

  • 问题内容: 我在数据库中有以下架构(简化) 我在问是否有任何方法可以为主表定义实体,以便直接使用其他表中的标签,即无需为其他表定义实体。 我无法更改数据库架构,这真的很糟糕(到处都有多个标签/代码对,在多个表中定义)。而且,如果有可能,此解决方案将使我的代码保持简单,因为我真的不需要这些其他实体。 我想这会导致类似的结果: 在此先感谢您的帮助! 问题答案: 另一种可能性是使用注释从另一个表中获取值

  • 问题内容: 我在何时遇到oracle的问题。 该查询始终返回null,尽管很明显结果应该是第一种情况。我是否缺少有关oracle中字符串比较的内容? 问题答案: 您要再次检查字符串和一个空字符串,从而出现问题;在Oracle中,您最好检查一下您的字符串: 关于Oracle处理空字符串和空值的方式,在这里您可以找到更多信息 一个例子: 给出: 简而言之,谈论时,您可以依靠的唯一支票是: