如何有效地为List的所有元素添加前缀?

时间:2015-05-18 06:53:46

标签: java list collections set

我有一个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上。

2 个答案:

答案 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();
        }
    };
}

通过这种方式,您可以创建一个实际上不包含数据的“虚拟列表”,但可以即时计算它。