3 回答

TA貢獻1772條經驗 獲得超5個贊
您可以創建輔助方法,該方法將使用上的操作T將類型的列表(數組)轉換為類型的列表(數組)。Umapstream
//for lists
public static <T, U> List<U> convertList(List<T> from, Function<T, U> func) {
return from.stream().map(func).collect(Collectors.toList());
}
//for arrays
public static <T, U> U[] convertArray(T[] from,
Function<T, U> func,
IntFunction<U[]> generator) {
return Arrays.stream(from).map(func).toArray(generator);
}
并像這樣使用它:
//for lists
List<String> stringList = Arrays.asList("1","2","3");
List<Integer> integerList = convertList(stringList, s -> Integer.parseInt(s));
//for arrays
String[] stringArr = {"1","2","3"};
Double[] doubleArr = convertArray(stringArr, Double::parseDouble, Double[]::new);
請注意, s -> Integer.parseInt(s)可以將其替換為Integer::parseInt(請參閱方法參考)

TA貢獻1869條經驗 獲得超4個贊
List<Integer> intList = strList.stream()
.map(Integer::valueOf)
.collect(Collectors.toList());

TA貢獻1946條經驗 獲得超3個贊
不需要接受的答案中的幫助方法。流可以與lambda一起使用,或者通常使用Method References縮短。流啟用功能操作。map()轉換元素和/ collect(...)或toArray()將流包裝回數組或集合。
Venkat Subramaniam的演講(視頻)比我更好地解釋了這一點。
1轉換List<String>成List<Integer>
List<String> l1 = Arrays.asList("1", "2", "3");
List<Integer> r1 = l1.stream().map(Integer::parseInt).collect(Collectors.toList());
// the longer full lambda version:
List<Integer> r1 = l1.stream().map(s -> Integer.parseInt(s)).collect(Collectors.toList());
2轉換List<String>為int[]
int[] r2 = l1.stream().mapToInt(Integer::parseInt).toArray();
3轉換String[]為List<Integer>
String[] a1 = {"4", "5", "6"};
List<Integer> r3 = Stream.of(a1).map(Integer::parseInt).collect(Collectors.toList());
4轉換String[]為int[]
int[] r4 = Stream.of(a1).mapToInt(Integer::parseInt).toArray();
5轉換String[]成List<Double>
List<Double> r5 = Stream.of(a1).map(Double::parseDouble).collect(Collectors.toList());
6(獎金)轉換int[]為String[]
int[] a2 = {7, 8, 9};
String[] r6 = Arrays.stream(a2).mapToObj(Integer::toString).toArray(String[]::new);
當然,可能會有更多變化。
另請參見這些示例的Ideone版本??梢詥螕鬴ork,然后運行以在瀏覽器中運行。
添加回答
舉報