3 回答

TA貢獻1840條經驗 獲得超5個贊
最簡單的方法是使用toArray(IntFunction<A[]> generator)帶有數組構造函數引用的方法。這在方法的API文檔中有所建議。
String[] stringArray = stringStream.toArray(String[]::new);
它的作用是找到一個方法,它接受一個整數(大?。┳鳛閰担⒎祷匾粋€String[],這正是(其中一個重載)的new String[]作用。
你也可以寫自己的IntFunction:
Stream<String> stringStream = ...;
String[] stringArray = stringStream.toArray(size -> new String[size]);
這樣做的目的IntFunction<A[]> generator是將一個整數(數組的大?。┺D換為一個新數組。
示例代碼:
Stream<String> stringStream = Stream.of("a", "b", "c");
String[] stringArray = stringStream.toArray(size -> new String[size]);
Arrays.stream(stringArray).forEach(System.out::println);
打?。?/p>
a
b
c

TA貢獻1752條經驗 獲得超4個贊
如果你想從一個Stream獲得一個整數數組,值為1到10,你可以使用IntStream。
在這里,我們使用Stream.of方法創建Stream,并使用mapToInt將Stream轉換為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,只使用IntStream,這是同樣的事情
int[]array2 = IntStream.rangeClosed(1, 10).toArray();

TA貢獻1804條經驗 獲得超2個贊
您可以使用這個簡單的代碼塊將java 8流轉換為數組:
String[] myNewArray3 = myNewStream.toArray(String[]::new);
但是讓我們更多地解釋一下,首先,讓我們創建一個填充了三個值的字符串列表:
String[] stringList = {"Bachiri","Taoufiq","Abderrahman"};
從給定的數組創建一個流:
Stream<String> stringStream = Arrays.stream(stringList);
我們現在可以在這個流Ex上執行一些操作:
Stream<String> myNewStream = stringStream.map(s -> s.toUpperCase());
最后使用以下方法將其轉換為java 8數組:
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表達
String[] myNewArray2 = myNewStream.toArray(value -> new String[value]);
3-方法參考
String[] myNewArray3 = myNewStream.toArray(String[]::new);
方法參考說明:
這是編寫lambda表達式的另一種方式,它完全等同于另一種。
添加回答
舉報