当前位置: 首页 > 面试题库 >

如何在列表的每个元素上调用方法?

曾成天
2023-03-14
问题内容

假设我有汽车清单:

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]

问题答案:

更新:

有关使用lambda表达式的Java8解决方案,请参见aaiezza的答案。
Java 8之前的原始答案:

使用Guava可以实现效果,Function实现比您现有的更加冗长:

List<Car> cars = //...

Function<Car, String> carsToNames = new Function<Car, String>() {
   @Override
   public String apply(Car car) {
      return car.getName();
   }
}

List<String> names = Lists.transform(cars, carsToNames);

(请记住,Lists.transform返回的视图将延迟应用该函数-
如果要立即复制,则需要将返回的列表复制到新列表中。)

因此,这并不能帮助您缩短代码,但是,这是实现Java所需效果的详细程度示例。

编辑:
您可能会看看lambdaj,一个似乎可以满足您所寻找内容的库。我没有亲自尝试过,但是首页显示了以下示例:

List<Person> personInFamily = asList(new Person("Domenico"), new Person("Mario"), new Person("Irma"));
forEach(personInFamily).setLastName("Fusco");


 类似资料:
  • 问题内容: 我只想将一个列表中的每个元素除以一个int。 这是错误: 我了解为什么收到此错误。但是我为找不到解决方案感到沮丧。 还尝试了: 错误: 预期结果: 编辑: 以下代码给了我预期的结果: 但是,有没有更容易/更快的方法来做到这一点? 问题答案: 惯用的方式是使用列表理解: 或者,如果您需要保留对原始列表的引用:

  • 如何使用8流对列表中的每个元素Java求和? 例如,我在一个列表中有3个不同的列表,我试图对每个列表中的每个元素求和,然后创建另一个列表。我不熟悉Java 8,尝试使用流API解决一些问题: 我正在努力实现的输出:

  • 本文向大家介绍Elm转换列表的每个元素,包括了Elm转换列表的每个元素的使用技巧和注意事项,需要的朋友参考一下 示例 List.map : (a -> b) -> List a -> List b 是一个高阶函数,它将一个参数函数应用于列表的每个元素,并返回具有修改后值的新列表。 如果您需要知道元素的索引,可以使用List.indexedMap : (Int -> a -> b) -> List

  • 问题内容: 我有一个清单: 如何将每个元素乘以5?输出应为: 问题答案: 您可以只使用列表理解: 请注意,列表理解通常是执行循环的更有效方法: 作为替代方案,以下是使用流行的Pandas软件包的解决方案: 或者,如果您只想要列表:

  • 我正在为SeleniumWebDriver测试框架使用PageObject模式 在我的pageObject类中,我有多个使用驱动程序的方法。findElement查找同一页面上存在的相同webelement 例如: 我的问题是: 1.如何避免在相同的WebElement变量上多次使用driver.findElement。我想要一种方法,一旦我找到网络,我将在任何其他方法中使用变量,而不使用driv