假设我有汽车清单:
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