假设我有一个这样的界面:
public interface Service {
List<Result> getResults();
// some other methods
}
我有一个 List
List<Service> services
中该接口(interface)的实现.
我如何转换 List
进入 List
对 getResults
的方法引用方法(或者更好:List
的 Supplier<List<Result>>
)动态?
我在寻找类似于
的东西List<Supplier<List<Result>>> = services.stream()
.map(s -> s::getResults)
.collect(Collectors.toList());
最佳答案
编译器似乎需要一些类型推断方面的帮助。
List<Supplier<List<Result>>> list =
services.stream()
.map(s -> (Supplier<List<Result>>)(() -> s.getResults()))
.collect(Collectors.toList());
这是一个替换您的 Service
的工作示例与 StringBuilder
的接口(interface)和你的 Result
与 String
.我正在使用 Arrays.asList(s.toString().split(" "))
产生一个List<String>
来自每个 StringBuilder
.
List<StringBuilder> services = new ArrayList<>();
services.add (new StringBuilder());
services.add (new StringBuilder());
services.get (0).append ("one two three");
services.get (1).append ("four five six");
List<Supplier<List<String>>> list =
services.stream()
.map(s -> (Supplier<List<String>>) (() -> Arrays.asList(s.toString().split(" "))))
.collect(Collectors.toList());
System.out.println (list.get (0).get ());
System.out.println (list.get (1).get ());
输出:
[one, two, three]
[four, five, six]
关于java - 将 Java 8 Stream 映射到元素的方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38875031/