Java8中重新生成新的List
在Java8中,通过使用Stream API和Lambda表达式,我们可以轻松地对List进行转换和操作。这使得重新生成一个新的List变得非常简单和高效。本文将介绍如何使用Java8的新特性来重新生成一个新的List,并提供相应的代码示例。
Stream API和Lambda表达式简介
在Java8中,引入了Stream API和Lambda表达式。Stream API是一种处理集合数据的高级抽象,它允许我们以声明性的方式进行操作,而不需要关心底层的实现细节。Lambda表达式是一种函数式编程的概念,它可以让我们以更简洁和清晰的方式编写代码。
重新生成新的List
在Java8中,我们可以使用Stream API的map()
方法来对List中的每个元素进行转换,并将转换后的结果收集到一个新的List中。下面是一个示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ListTransformationExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("apple", "banana", "orange", "grape", "mango");
List<String> upperCaseFruits = fruits.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperCaseFruits);
}
}
上述代码中,我们首先创建了一个包含水果名称的List。然后,我们使用stream()
方法将List转换成一个流。接下来,我们使用map()
方法将每个水果名称转换为大写形式。最后,我们使用collect(Collectors.toList())
方法将转换后的结果收集到一个新的List中。
运行上述代码,输出结果为:[APPLE, BANANA, ORANGE, GRAPE, MANGO]
,表示成功将原始List中的水果名称转换为大写形式并生成了一个新的List。
过滤List中的元素
除了对List中的元素进行转换,我们还可以使用Stream API的filter()
方法来过滤List中的元素。下面是一个示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ListFilteringExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers);
}
}
上述代码中,我们首先创建了一个包含数字的List。然后,我们使用stream()
方法将List转换成一个流。接下来,我们使用filter()
方法筛选出所有偶数。最后,我们使用collect(Collectors.toList())
方法将过滤后的结果收集到一个新的List中。
运行上述代码,输出结果为:[2, 4, 6, 8, 10]
,表示成功过滤出了原始List中的所有偶数并生成了一个新的List。
将List元素映射到多个属性
有时候,我们可能需要从一个对象的List中提取出其中的多个属性,并生成一个新的List。在Java8中,我们可以使用Stream API的flatMap()
方法来实现这个功能。下面是一个示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ListTransformationExample {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Carol", 35)
);
List<Integer> ages = persons.stream()
.flatMap(person -> person.getAges().stream())
.collect(Collectors.toList());
System.out.println(ages);
}
}
class Person {
private String name;
private List<Integer> ages;
public Person(String name, Integer... ages) {
this.name = name;
this.ages = Arrays.asList(ages);
}
public List<Integer> getAges() {
return ages;
}
}
上述代码中,我们首先创建了一个包含Person对象的List。每个Person对象中包含一个姓名和一组年龄。然后,我们使用`