流减少内部元素
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 个元素时请遵循标准命名约定。
我想将流减少为原始流的内部元素流。如果结果也是一个 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 个元素时请遵循标准命名约定。