有没有办法在添加到列表时避免循环?

我想知道这样的代码:

List<String> list = new ArrayList<String>();
for(CustomObject co : objects) {
    list.add(co.getActualText());
}

可以以不同的方式编写吗?我的意思是,当然在某个时候会有一个循环,但我想知道是否有我忽略的API用法


答案 1

如果您使用 Java 8,则可以利用 Stream API:

List<String> list = objects.stream()
                           .map(CustomObject::getActualText)
                           .collect(Collectors.toList());

答案 2

如果你有Java 8,那么:

objects.forEach(item -> list.add(item.getActualText()));

虽然内部仍然是一个循环。

编辑有点偏离主题:IMO这是最具可读性和最佳解决方案。为什么不直接使用您可能会问的前额。答案是:因为通过这种方式,集合选择迭代项的最佳方式。例如,ArrayList 不使用迭代器,因为它比您更了解:

@Override
public void forEach(Consumer<? super E> action) {
    Objects.requireNonNull(action);
    final int expectedModCount = modCount;
    @SuppressWarnings("unchecked")
    final E[] elementData = (E[]) this.elementData;
    final int size = this.size;
    for (int i=0; modCount == expectedModCount && i < size; i++) {
        action.accept(elementData[i]);
    }
    if (modCount != expectedModCount) {
        throw new ConcurrentModificationException();
    }
}