将Java 8流转换为数组的最简单/最短的方法是什么?
当前回答
import java.util.List;
import java.util.stream.Stream;
class Main {
public static void main(String[] args) {
// Create a stream of strings from list of strings
Stream<String> myStreamOfStrings = List.of("lala", "foo", "bar").stream();
// Convert stream to array by using toArray method
String[] myArrayOfStrings = myStreamOfStrings.toArray(String[]::new);
// Print results
for (String string : myArrayOfStrings) {
System.out.println(string);
}
}
}
在线试试:https://repl.it/@SmaMa/流到数组
其他回答
如果你想从Stream<Integer>中获得一个整数数组,值从1到10,有IntStream供你使用。
这里我们用一个流创建了一个流。方法,使用mapToInt将Stream<Integer>转换为IntStream。然后我们可以调用IntStream的toArray方法。
Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
//or use this to create our stream
//Stream<Integer> stream = IntStream.rangeClosed(1, 10).boxed();
int[] array = stream.mapToInt(x -> x).toArray();
这里是同样的事情,没有Stream<Integer>,只使用IntStream:
int[]array2 = IntStream.rangeClosed(1, 10).toArray();
最简单的方法是使用toArray(IntFunction<A[]> generator)方法和数组构造函数引用。该方法的API文档中建议这样做。
String[] stringArray = stringStream.toArray(String[]::new);
它所做的是找到一个以整数(size)作为参数的方法,并返回一个String[],这正是new String[]的(一个重载)所做的。
你也可以写你自己的IntFunction:
Stream<String> stringStream = ...;
String[] stringArray = stringStream.toArray(size -> new String[size]);
IntFunction<A[]>生成器的目的是将一个整数(数组的大小)转换为一个新数组。
示例代码:
Stream<String> stringStream = Stream.of("a", "b", "c");
String[] stringArray = stringStream.toArray(size -> new String[size]);
Arrays.stream(stringArray).forEach(System.out::println);
打印:
a
b
c
您可以创建一个将流转换为数组的自定义收集器。
public static <T> Collector<T, ?, T[]> toArray( IntFunction<T[]> converter )
{
return Collectors.collectingAndThen(
Collectors.toList(),
list ->list.toArray( converter.apply( list.size() ) ) );
}
快速使用
List<String> input = Arrays.asList( ..... );
String[] result = input.stream().
.collect( CustomCollectors.**toArray**( String[]::new ) );
将文本转换为字符串数组,其中用逗号分隔每个值,并修剪每个字段,例如:
String[] stringArray = Arrays.stream(line.split(","))
.map(String::trim)
.toArray(String[]::new);
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
int[] arr= stream.mapToInt(x->x.intValue()).toArray();
推荐文章
- 如何修剪空白的数组值在php
- 一对多、多对一、多对多的区别?
- 从枚举中选择一个随机值?
- 如何从URL获取参数与JSP
- 如何在Eclipse中生成Javadoc注释?
- 找到java类从哪里加载
- 从集合中随机选取一个元素
- 为什么x == (x = y)和(x = y) == x不一样?
- 什么Java 8流。收集等价物可在标准Kotlin库?
- 等待未来的名单
- 如何检查JSON键是否存在?
- 为什么MongoDB Java驱动在条件中使用随机数生成器?
- 即使从未抛出异常,使用try-catch块的代价是否昂贵?
- 什么时候我们应该使用观察者和可观察对象?
- Java中的split()方法对点(.)不起作用。