2

我有以下代码:

List<Person> personList = getPersons();    
List<Function<List<Person>, Stream<Person>>> streams = new ArrayList<>();
streams.add(p -> p.stream());
streams.add(p -> p.parallelStream());

Intellij Idea 建议我应该将 lambda 表达式替换为方法引用。我想这样做,只是我不确定流列表的新通用类型应该是什么。我试图评估表达式 personList::stream 但我得到“没有这样的实例字段:'stream'”。如果我尝试 List::stream 或 ArrayList::stream (人员列表的具体类型),我会得到:“没有这样的静态字段:'stream'”。有没有办法将方法引用添加到列表中?如果是这样,列表的通用类型应该是什么?

谢谢

正如 assylias 指出的那样,IDEA 只是在抱怨并且代码运行没有问题,我仍然在 IDEA 13 中遇到相同代码的问题,因为 stream.add 期望返回 Stream 和 List::stream 的函数返回 Stream。为了解决它,我最终使用了以下代码:

List<Person> personList = getPersons();
List<Supplier<Stream<Person>>> streams = new ArrayList<>();
streams.add(personList::stream);
streams.add(personList::parallelStream);
4

2 回答 2

2

personList::stream基本相同p -> p.stream()。两者本身都没有类型。表达式的类型是接受它的上下文的类型。

于 2014-01-29T10:07:41.607 回答
2

这编译得很好(b119):

List<String> personList = Arrays.asList("a", "b");
List<Function<List<String>, Stream<String>>> streams = new ArrayList<>();
streams.add(List::stream);
streams.add(List::parallelStream);

您可能正在使用旧版本的 jdk 或 IntelliJ 惹恼了您!

于 2014-01-28T15:32:53.643 回答