【发布时间】:2015-04-10 13:03:11
【问题描述】:
使用 Java 8 中的流 API,下面的 createObjects() 将在单行中返回 X 对象的列表。
public class StreamObjectCreator {
public List<X> createObjects(Integer... s) {
return Arrays.stream(s).map(X::new).collect(Collectors.toList());
}
private static class X {
int s;
public X(int s) {
this.s = s;
}
}
}
现在,考虑下面的枚举Y:
private static enum Y {
VALUE_1(2), VALUE_2(1);
private int i;
private Y(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
我想做类似的事情并返回以下列表:
[VALUE_1,VALUE_1,VALUE_2]
换句话说,i 每个枚举值的出现次数。
使用“旧”的Java方式,可以这样实现。
List<Y> createEnumList() {
List<Y> list = new ArrayList<Y>();
for (Y y : Y.values()) {
for (int i = 0; i < y.getI(); i++) {
list.add(y);
}
}
return list;
}
这可以通过使用流 API 或一些 lambda 表达式的更少样板代码来完成吗?我玩了一段时间的流 API 没有成功,在 Google 上找到的大多数信息都指向“更简单”的教程。
【问题讨论】:
-
我不明白这段代码的目的......
-
你可以用流来做,是的,但不能用“更少的代码”
标签: java enums java-8 java-stream