有没有办法在添加到列表时避免循环?
2022-09-01 13:45:13
我想知道这样的代码:
List<String> list = new ArrayList<String>();
for(CustomObject co : objects) {
list.add(co.getActualText());
}
可以以不同的方式编写吗?我的意思是,当然在某个时候会有一个循环,但我想知道是否有我忽略的API用法
我想知道这样的代码:
List<String> list = new ArrayList<String>();
for(CustomObject co : objects) {
list.add(co.getActualText());
}
可以以不同的方式编写吗?我的意思是,当然在某个时候会有一个循环,但我想知道是否有我忽略的API用法
如果您使用 Java 8,则可以利用 Stream API:
List<String> list = objects.stream()
.map(CustomObject::getActualText)
.collect(Collectors.toList());
如果你有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();
}
}