我正在阅读实际使用的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方法返回一个字符串,那么您将获得相同的结果,而无需使用提取名称的函数在原始流上进行映射。
什么时候每个对象都应该从toString
继承Object
?
java大神给出的解决方案
书中所说的一切都是错误的,而您的解释是正确的(除非要点完全不同,而您没有理解)
people.stream()
将生成一个Stream<People>
,而Collectors.joining
具有以下定义:
public static Collector<CharSequence, ?, String> joining()
显然这不能工作,因为Person
不是CharSequence
的实例。
有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…
查看抽象类的方法是否未被扩展类之一覆盖的方法 - java我有一个抽象类,比如AbstractClass和扩展该抽象类的多个其他类(700多个)。 AbstractClass有一个方法,比方说baseMethod(),它不是抽象方法。许多类(500+)覆盖该方法并具有自己的实现。现在,通过eclipse,我可以很容易地看到通过Ctrl+Shift+G覆盖该方法的方法,但是除了手动以外,还有其他方法可以看到不覆盖该方…
从较小的字节数组(Java)进行长时间转换 - java我正在尝试将字节数组转换为long,但是接收到BufferUnderflowException ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES); byte[] arg1 = new byte[] {0x04, (byte)0xB0}; buffer.put(arg1, 0, arg1.length); …
java.net.URI.create异常 - javajava.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…
如何修改休眠的SQL查询? - java我有点好奇,有没有办法修改hibernate的核心,以便我可以自定义生成的SQL query。例如,在生成的查询中添加功能以使用connect by prior(oracle)或我要自定义的任何其他子句。 java大神给出的解决方案 起初,这样的问题总是在我心中敲响警钟。你被警告了...AFAIK,hibernate使用所谓的dialects进行特定的优化。…