java - 如何在 List 的每个元素上调用方法?

标签 java list list-comprehension

假设我有一个汽车 list :

public class Car {
    private String brand;
    private String name;
    private String color;

    public Car() { // ...  }

    public getName() { return name; }
    // ...
}

// Suppose that I have already init the list of car
List<Car> cars = //...
List<String> names = new ArrayList<String>();


for (Car c : cars ) {
    names.add(c.getName());
}

如何缩短上面的代码?简而言之,如何在 List 的每个元素上调用方法?

例如,在 Python 中:

[car.name for car in cars]

最佳答案

Java 8 will (hopefully) have some form of lambda expression, which will make code like this more feasible. (Whether there'll be anything like list comprehensions is another matter.)

你的愿望已经实现了!

---编辑---
哈哈,好像在暗示:forEach()

一定要看看这个。

针对您的问题,具体如下:

// Suppose that I have already init the list of car
List<Car> cars = //...
List<String> names = new ArrayList<String>();

// LAMBDA EXPRESSION
cars.forEach( (car) -> names.add(car.getName()) );

他们在这里所做的真是令人难以置信。我很高兴看到它在未来被使用。

---编辑---
我应该早点看到这个,但我忍不住发了贴。

jdk8 中添加的 Stream 功能允许 map method .

// Suppose that I have already init the list of car
List<Car> cars = //...

// LAMBDA EXPRESSION
List<String> names = cars.stream().map( car -> car.getName() ).collect( Collectors.toList() );

更简洁的方法是使用 Java 8 的 method references (oracle doc)。

List<String> names = cars.stream().map( Car::getName ).collect( Collectors.toList() );

关于java - 如何在 List 的每个元素上调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7221833/

相关文章:

java - 如何更改不同类的字符串数组的值?

java - Groovy 中的等效代码

java在for循环中改变值

python - 在列表中查找独特的项目并将它们添加到具有列表理解的新列表中

java - 如何使用基于 Java 的配置来配置 Spring Batch StepScope?

python - 如何在不返回函数的情况下访问函数内部的列表?

c++ - 如何使用以列表作为值的无序映射

android - 默认 Android 时区列表

python - 尝试索引数组时,具有多个元素的数组的真值不明确

python - 如何使用 python 中的 group() 方法进行列表理解?