流减少内部元素

Stream reduction inner Elements

我想将流减少为原始流的内部元素流。如果结果也是一个 Stream,那将是最好的。但如果必须如此,列表也可以。

一个简单的例子是:

    private class container {
        containerLevel2 element;

        public container(String string) {
            element = new containerLevel2(string);
        }

    }
    private class containerLevel2 {
        String info;

        public containerLevel2(String string) {
            info = string;
        }

    }
public void test() {
        List<container> list = Arrays.asList(new container("green"), new container("yellow"), new container("red"));

> How can i do the following part with Streams? I want something like List<String> result = list.stream()...
        List<String> result = new ArrayList<String>();
        for (container container : list) {
            result.add(container.element.info);
        }

        assertTrue(result.equals(Arrays.asList("green", "yellow", "red")));
    }

希望你能理解我的问题。抱歉英语不好,感谢您的回答。

流只是一个处理概念。您不应该将对象存储在流中。所以我更喜欢集合而不是流来存储这些对象。

Collection<String> result = list.stream()
    .map(c -> c.element.info)
    .collect(Collectors.toList());

更好的方法是在您的容器 class 中添加一个新方法,将 returns 元素信息作为字符串,然后在您的 lambda 表达式中使用该方法。这是它的样子。

public String getElementInfo() {
    return element.info;
}

Collection<String> result = list.stream()
    .map(container::getElementInfo)
    .collect(Collectors.toList());

P.S。您的 class 名称应以大写字母开头。命名 API 个元素时请遵循标准命名约定。