有沒有什么方法可以使用如下所示的行內函式/lambda 在 Java 中宣告和填充陣列?
final int NUM_NAMES = 10;
String names = () -> {
ArrayList<String> names = new ArrayList();
for (int i = 0; i < NUM_NAMES; i ) {
names.add("Name " i);
}
return names.toArray();
};
uj5u.com熱心網友回復:
您可以使用以下內容:
List<String> names = IntStream.range(0, 10)
.boxed()
.map(i -> String.format("Name %d", i))
.collect(Collectors.toList())
希望那里的語法很好,但你明白了。
uj5u.com熱心網友回復:
從技術上講,您可以行內執行此操作,但語法非常冗長:
String[] names = ((Supplier<String[]>)() -> {
ArrayList<String> namesList = new ArrayList<>();
for (int i = 0; i < NUM_NAMES; i ) {
namesList.add("Name " i);
}
return namesList.toArray(new String[0]);
}).get();
所以我不會推薦它。您必須指定 lambda 運算式的型別,轉換為該型別,然后將整個轉換運算式放在括號中,以便您可以呼叫get以獲取生成的陣列。
行內初始化陣列的更簡潔方法是這樣的輔助方法(這是受 Kotlin 陣列建構式的啟發):
public static <T> T[] buildArray(T[] arr, IntFunction<T> elementFunction) {
for (int i = 0 ; i < arr.length ; i ) {
arr[i] = elementFunction.apply(i);
}
return arr;
}
在第二個引數中,您指定每個索引所需的元素:
String[] names = buildArray(new String[NUM_NAMES], i -> "Name " i);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/339084.html
