3 回答

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
最簡(jiǎn)單的方法是使用toArray(IntFunction<A[]> generator)帶有數(shù)組構(gòu)造函數(shù)引用的方法。這在方法的API文檔中有所建議。
String[] stringArray = stringStream.toArray(String[]::new);
它的作用是找到一個(gè)方法,它接受一個(gè)整數(shù)(大?。┳鳛閰?shù),并返回一個(gè)String[],這正是(其中一個(gè)重載)的new String[]作用。
你也可以寫(xiě)自己的IntFunction:
Stream<String> stringStream = ...;
String[] stringArray = stringStream.toArray(size -> new String[size]);
這樣做的目的IntFunction<A[]> generator是將一個(gè)整數(shù)(數(shù)組的大?。┺D(zhuǎn)換為一個(gè)新數(shù)組。
示例代碼:
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

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果你想從一個(gè)Stream獲得一個(gè)整數(shù)數(shù)組,值為1到10,你可以使用IntStream。
在這里,我們使用Stream.of方法創(chuàng)建Stream,并使用mapToInt將Stream轉(zhuǎn)換為IntStream。然后我們可以調(diào)用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();
如果沒(méi)有Stream,只使用IntStream,這是同樣的事情
int[]array2 = IntStream.rangeClosed(1, 10).toArray();

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
您可以使用這個(gè)簡(jiǎn)單的代碼塊將java 8流轉(zhuǎn)換為數(shù)組:
String[] myNewArray3 = myNewStream.toArray(String[]::new);
但是讓我們更多地解釋一下,首先,讓我們創(chuàng)建一個(gè)填充了三個(gè)值的字符串列表:
String[] stringList = {"Bachiri","Taoufiq","Abderrahman"};
從給定的數(shù)組創(chuàng)建一個(gè)流:
Stream<String> stringStream = Arrays.stream(stringList);
我們現(xiàn)在可以在這個(gè)流Ex上執(zhí)行一些操作:
Stream<String> myNewStream = stringStream.map(s -> s.toUpperCase());
最后使用以下方法將其轉(zhuǎn)換為java 8數(shù)組:
1-Classic方法(功能界面)
IntFunction<String[]> intFunction = new IntFunction<String[]>() {
@Override
public String[] apply(int value) {
return new String[value];
}
};
String[] myNewArray = myNewStream.toArray(intFunction);
2 -Lambda表達(dá)
String[] myNewArray2 = myNewStream.toArray(value -> new String[value]);
3-方法參考
String[] myNewArray3 = myNewStream.toArray(String[]::new);
方法參考說(shuō)明:
這是編寫(xiě)lambda表達(dá)式的另一種方式,它完全等同于另一種。
添加回答
舉報(bào)