我有一个List,我需要在列表的所有元素中添加前缀。
以下是我通过迭代列表然后添加它来实现它的方式。还有其他更好的方法吗?任何一两个衬垫可以做同样的事情吗?
private static final List<DataType> DATA_TYPE = getTypes();
public static LinkedList<String> getData(TypeFlow flow) {
LinkedList<String> paths = new LinkedList<String>();
for (DataType current : DATA_TYPE) {
paths.add(flow.value() + current.value());
}
return paths;
}
我需要返回LinkedList,因为我正在使用像removeFirst
这样的LinkedList类的一些方法。
到目前为止我在Java 7上。
答案 0 :(得分:7)
对于一个衬垫,请使用Java 8 Streams:
List<String> paths = DATA_TYPE.stream().map(c -> flow.value() + c.value()).collect(Collectors.toList());
如果必须生成LinkedList
,则应使用其他收集器。
答案 1 :(得分:4)
您的实施看起来没问题,但如果您想要不同的东西,请尝试以下方法:
public static List<String> getData(final TypeFlow flow) {
return new AbstractList<String>() {
@Override
public String get(int index) {
return flow.value()+DATA_TYPE.get(index).value();
}
@Override
public int size() {
return DATA_TYPE.size();
}
};
}
通过这种方式,您可以创建一个实际上不包含数据的“虚拟列表”,但可以即时计算它。