java - 将 Java 8 Stream 映射到元素的方法引用

标签 java java-8 java-stream

假设我有一个这样的界面:

public interface Service {  
    List<Result> getResults();  
    // some other methods  
}

我有一个 List List<Service> services 中该接口(interface)的实现.

我如何转换 List进入 ListgetResults 的方法引用方法(或者更好:ListSupplier<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)和你的 ResultString .我正在使用 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/

相关文章:

java - 为什么 StringBuilder::append 是 BiConsumer<StringBuilder, String>?

java - 为什么 Java 8 Stream 接口(interface)没有 min() 无参数版本?

java - 有没有一种方法可以使用 Java Streams 从字符串的 ArrayList 中过滤符合条件的子字符串?

java - 运行时错误处理

java - 为什么会发生这个 R 故障(Eclipse Android Java)?

java - 我需要将随机生成的数字插入数组

java - 嵌套异常与现代(Java SE 7)异常

javafx - 如何禁用 JavaFx DatePicker 的 TextField?

java - Java中根据另一个列表获取优先级最高的元素

java-8 - Kotlin 中的限制函数