什么是Java 8相当于Guava的transformAndConcat?

Fri*_*rdt 5 java guava java-8

让我们假设我有一个包含List,例如

 public static class ListHolder {
    List<String> list = new ArrayList<>();

    public ListHolder(final List<String> list) {
        this.list = list;
    }

    public List<String> getList() {
        return list;
    }
}
Run Code Online (Sandbox Code Playgroud)

让我们进一步假设我有一个完整的这个类的实例列表:

    ListHolder listHolder1 = new ListHolder(Arrays.asList("String 1", "String 2"));
    ListHolder listHolder2 = new ListHolder(Arrays.asList("String 3", "String 4"));
    List<ListHolder> holders = Arrays.asList(listHolder1, listHolder2);
Run Code Online (Sandbox Code Playgroud)

现在我需要提取所有字符串以获取包含所有实例的所有字符串的字符串列表,例如:

[String 1, String 2, String 3, String 4]
Run Code Online (Sandbox Code Playgroud)

使用Guava,这将是这样的:

     List<String> allString = FluentIterable
            .from(holders)
            .transformAndConcat(
                    new Function<ListHolder, List<String>>() {
                        @Override
                        public List<String> apply(final ListHolder listHolder) {
                            return listHolder.getList();
                        }
                    }
            ).toList();
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使用Java 8流API实现相同的目标

use*_*037 14

List<String> allString = holders.stream()
    .flatMap(h -> h.getList().stream())
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

这是一个关于收集展平的旧问题:(展平集合)

  • 或`.map(ListHolder :: getList).flatMap(List :: stream)` (6认同)