mkv*_*cvc 4 java java-8 java-stream
假设我有这样的界面:
public interface Service {
List<Result> getResults();
// some other methods
}
Run Code Online (Sandbox Code Playgroud)
我有一个List该接口的实现List<Service> services.
如何变换List成一个List方法引用到getResults方法(甚至更好:一List的Supplier<List<Result>>)动态?
我正在寻找类似的东西
List<Supplier<List<Result>>> = services.stream()
.map(s -> s::getResults)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
似乎编译器需要一些类型推断的帮助.
List<Supplier<List<Result>>> list =
services.stream()
.map(s -> (Supplier<List<Result>>)(() -> s.getResults()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这里有一个工作示例它取代您Service与接口StringBuilder和你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 ());
Run Code Online (Sandbox Code Playgroud)
输出:
[one, two, three]
[four, five, six]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |