文
章
目
录
章
目
录
学习使用Stream的toArray() API将Stream转换为数组。在本教程中,我们将通过多个示例来看如何将Stream的元素收集到数组中。
1.Stream的toArray()方法
toArray()方法返回包含给定Stream元素的数组。这是一种终止操作,返回一个数组。
Object[] toArray()
<T> T[] toArray(IntFunction<T[]> generator)
toArray()方法是一种重载方法。第二种方法使用生成函数来分配返回的数组。
生成函数采用一个整数,即所需数组的大小,并产生一个所需大小的数组。
2.Stream的toArray()示例
示例1:将Stream of String转换为String数组
在给定的示例中,我们使用toArray() API将Stream转换为数组。
Stream<String> tokenStream = Arrays.asList("A", "B", "C", "D").stream(); //stream
String[] tokenArray = tokenStream.toArray(String[]::new); //array
System.out.println(Arrays.toString(tokenArray)); //[A, B, C, D]
示例2:将无限Stream转换为数组
要将无限Stream转换为数组,我们必须限制Stream以获取有限数量的元素。
1)转换为int数组:
IntStream infiniteNumberStream = IntStream.iterate(1, i -> i+1);
int[] intArray = infiniteNumberStream.limit(10)
.toArray();
System.out.println(Arrays.toString(intArray)); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2)转换为Integer包装类数组
IntStream infiniteNumberStream = IntStream.iterate(1, i -> i+1);
Integer[] integerArray = infiniteNumberStream.limit(10)
.boxed()
.toArray(Integer[]::new);
System.out.println(Arrays.toString(integerArray));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
示例3:Stream过滤和收集到数组
有时我们需要查找Stream中的特定项,然后仅将这些元素添加到数组中。在这里,我们可以使用Stream.filter()方法传递一个Predicate,它将返回仅匹配预设条件的元素。
public class Main
{
public static void main(String[] args)
{
List<Employee> employeeList = new ArrayList<>(Arrays.asList(
new Employee(1, "A", 100),
new Employee(2, "B", 200),
new Employee(3, "C", 300),
new Employee(4, "D", 400),
new Employee(5, "E", 500),
new Employee(6, "F", 600)));
Employee[] employeesArray = employeeList.stream()
.filter(e -> e.getSalary() < 400)
.toArray(Employee[]::new);
System.out.println(Arrays.toString(employeesArray));
}
}
程序输出:
[Employee [id=1, name=A, salary=100.0],
Employee [id=2, name=B, salary=200.0],
Employee [id=3, name=C, salary=300.0]]
3.结论
我们可以使用Stream的toArray()函数以多种方式将Stream元素收集到数组中。所有用例都可以使用此功能。