[英]How do I print out this stream?
library.stream()
.map(book -> book.getAuthor())
.filter(author -> author.getAge() >= 50)
.map(Author::getLastName)
.limit(10)
.collect(Collectors.toList());
如何打印清单? 我试过了
System.out.println(Collectors.toList());
但它给了我
java.util.stream.Collectors$CollectorImpl@4ec6a292
您需要将此表达式分配给某个列表,如下所示,
List<String> lastNameList = library.stream()
.map(book -> book.getAuthor())
.filter(author -> author.getAge() >= 50)
.map(Author::getLastName)
.limit(10)
.collect(Collectors.toList());
然后打印使用,
System.out.println(lastNameList);
或者你可以像这样直接打印,
System.out.println(library.stream()
.map(book -> book.getAuthor())
.filter(author -> author.getAge() >= 50)
.map(Author::getLastName)
.limit(10)
.collect(Collectors.toList()));
你实际上是这样做的,
System.out.println(Collectors.toList());
除了Collectors类型的空对象之外没有什么可以打印的,这就是你看到这个的原因,
java.util.stream.Collectors$CollectorImpl@4ec6a292
在List
使用foreach()
方法
library.stream()
.map(book -> book.getAuthor())
.filter(author -> author.getAge() >= 50)
.map(Author::getLastName)
.limit(10)
.forEach(System.out::println);
如果你想打印收集列表这里是一个例子
List<Integer> l = new ArrayList<>();
l.add(10);
l.add(20);
l.forEach(System.out::println);
这个例子会给你一个想法,
public class A {
public static void main(String[] args) throws IOException {
Stream<String> s = Stream.of("a", "b", "c");
List<String> names = s.collect(Collectors.toList());
System.out.println(names);
}
}
您需要使用Arrays.toString(SomeArray)
或其他一些方法,例如for循环。
当输出一些没有实现toString()
,java将只以不可读的Class$Subclass@LocationInMemory
格式输出它,这对它没有多大帮助。
您可以利用Stream.peek打印清单lastName
的S- author
S上方的50岁age
如下:
List<Book> library = List.of(new Book(new Author("overflow", 100)),
new Book(new Author("stack", 80)),
new Book(new Author("nullpointer", 49)));
// you were ignoring the result of collect
List<String> lastNames = library.stream()
.map(Book::getAuthor)
.filter(author -> author.getAge() >= 50)
.map(Author::getLastName)
.limit(10)
.peek(System.out::println) // this would print "overflow" and "stack"
.collect(Collectors.toList());
另外,请注意,如果您的主要目的只是打印名称而不是存储它们,您可以简单地使用forEach
而不是collect
,它们都是终端操作,只是collect具有基于Stream类型的返回类型,而forEach是无效的 : -
library.stream()
.map(Book::getAuthor)
.filter(author -> author.getAge() >= 50)
.map(Author::getLastName)
.limit(10)
.forEach(System.out::println);
以上所有,考虑到使用的对象与以下类似
class Book {
Author author;
Book(Author author) {
this.author = author;
}
// ... getters
}
class Author {
String lastName;
int age;
Author(String lastName, int age) {
this.lastName = lastName;
this.age = age;
}
// ... getters
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.