【Java8新特性】如何将Java流(Stream)转化成数组(Array)【Java 8 新特性】如何将Java流转化成数组
在本页中,我们将学习如何将Java流(Stream)转换为数组(Array)。
最好的转换⽅法是使⽤Array(IntFunction)⽅法。
在我们的⽰例中,我们将通过以下⽅式将Java流(Stream)转换为数组(Array)。
1. 我们将使⽤Array(IntFunction)返回所需类型的数组。
2. 使⽤Array(IntFunction)⽅法,该⽅法将返回Object[],然后将其更改为所需的数据类型。
3. 对于整数流,我们可以使⽤Array()将返回int[]。我们可以⽤同样的⽅法Array() 返
回long[]和Array()返回double[]。
4. 我们可以将流转换为列表,然后将列表转换为数组。要将流(Stream)转换成列表(list),我们需要在流(Stream)上使
⽤List()),⽽要将列表(list)转换为数组(Array),我们可以使⽤Array⽅法。
1.Array(IntFunction)
toArray(IntFunction)⽅法使⽤提供的⽣成器作为IntFunction返回包含此流元素的数组。这种⽅法是终端操作。
A[]toArray(IntFunction<A[]> generator)
参数:将⽣成器作为IntFunction传递,该函数⽣成所需类型和所提供长度的新数组。
返回:该⽅法返回由stream元素组成的数组。
异常:如果此流中任何元素的运⾏时类型不可分配给⽣成数组的运⾏时组件类型,则该⽅法将抛出ArrayStoreException。
⽰例1:
在这个例⼦中,我们将把字符串流转换成字符串数组。
List<String> list = Arrays.asList("A","B","C","D");
String[] strArray = list.stream().toArray(String[]::new);
for(String s : strArray){
System.out.println(s);
}
输出将是⼀个B C D。在上⾯的⽰例中,我们使⽤⽅法引⽤将IntFunction实例化为toArray⽅法中的⽣成器。
现在到带有lambda表达式的⽰例。
String[] strArray = list.stream().toArray(size ->new String[size]);
再⼀个例⼦。
StreamToStringArray.java
package;
import Arrays;
import List;
public class StreamToStringArray {
public static void main(String[] args){
List<String> list = Arrays.asList("Krishna","Mahesh","Kush");
String[] strArray = list.stream()
.filter(e -> e.startsWith("K"))
.toArray(size ->new String[size]);
for(String s : strArray){
System.out.println(s);
}
}
}
输出
Krishna
Kush
例2:
在这个例⼦中,我们将把整数流转换成整数数组。
StreamToIntegerArray.java
package;
import Arrays;
import List;
public class StreamToIntegerArray {
public static void main(String[] args){
List<Integer> list = Arrays.asList(10,20,30,40);
Integer[] intArray = list.stream()
.map(e -> e *2)
.toArray(Integer[]::new);
for(Integer i : intArray){
System.out.println(i);
}
}
}
输出为20 40 60 80。
在上⾯的例⼦中,我们使⽤了⽅法引⽤。现在到带有lambda表达式的代码。
List<Integer> list = Arrays.asList(10,20,30,40);
java streamInteger[] intArray = list.stream()
.map(e -> e *2)
.toArray(size ->new Integer[size]);
2.Array()
toArray()⽅法返回⼀个包含此流元素的Object数组。
Object[]toArray()
这种⽅法是终端操作。
例1:在这个例⼦中,我们将把⼀个字符串流转换成字符串数组。我们知道toArray()返回Object[],所以为了在我们需要的数据类型中转换它,我们可以使⽤pyOf⽅法。
Object[] objArray = Stream.of("AA","BB","CC").toArray();
String[] stArray = pyOf(objArray, objArray.length, String[].class);
for(String s : stArray){
System.out.println(s);
}
输出将是AA BB CC。
例2:在这个例⼦中,我们将把整数流转换成整数数组。
Object[] objArray = Stream.of(10,20,30,40).toArray();
Integer[] intArray = pyOf(objArray, objArray.length, Integer[].class);
for(Integer i : intArray){
System.out.println(i);
}
输出将是10 20 30 40。
3.Array()
IntStream是int-valued元素的流。Array()⽅法将int值流转换为int数组。
int[]toArray()
我们可以通过以下三种⽅式获得IntStream对象
IntStream intStream = IntStream.of(1,2,3,4,5);
IntStream intStream = IntStream.rangeClosed(1,5);
IntStream intStream = Stream.of(4,5,6,7,8).mapToInt(i -> i);
现在让我们来讨论⼀些使⽤Array()⽅法的例⼦。
⽰例1:
int[] intArray = IntStream.of(10,20,30,40).toArray();
for(Integer i : intArray){
System.out.println(i);
}
输出为10 20 30 40。
⽰例2:
int[] intArray = IntStream.rangeClosed(10,15).toArray();
for(Integer i : intArray){
System.out.println(i);
}
输出为10 11 12 13 14 15。
⽰例3:
int[] intArray = Stream.of(3,4,5,6).mapToInt(i -> i *2).toArray();
for(Integer i : intArray){
System.out.println(i);
}
输出为6 8 10 12。
4.List()
我们可以将流转换为列表,然后将列表转换为数组。要将stream转换成list,我们需要对stream使⽤List())。为了将list 转换成array,我们可以使⽤Array⽅法。
StreamToListToArray.java
package;
import Collectors;
import Stream;
public class StreamToListToArray {
public static void main(String[] args){
System.out.println("--- For String ---");
String[] ar = Stream.of("Java","Angular","Spring") .List())
.toArray(new String[0]);
for(String e : ar){
System.out.println(e);
}
System.out.println("--- For Integer ---");
Integer[] intArray = Stream.of(15,20,30)
.map(e -> e *2)
.
List())
.toArray(new Integer[0]);
for(Integer i : intArray){
System.out.println(i);
}
}
}
输出
--- For String ---
Java
Angular
Spring
--- For Integer ---
30
40
60
参考⽂献
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论