Java 8には強力なラムダ式が付属しているので、
リスト/文字列の配列を整数/浮動小数点数、倍精度浮動小数点数などの配列/リストに変換する関数を書きたいと思います。
通常のJavaでは、それは同じくらい簡単でしょう
for(String str : strList){
intList.add(Integer.valueOf(str));
}
しかし、整数の配列に変換される文字列の配列を考えると、どのようにしてラムダで同じことを達成するのですか。
List<Integer> intList = strList.stream()
.map(Integer::valueOf)
.collect(Collectors.toList());
承認された回答からのヘルパーメソッドは必要ありません。 Streams はラムダと一緒に使用することも、通常 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);
もちろんもっとたくさんのバリエーションが可能です。
これらの例の理想的なバージョン もご覧ください。フォークをクリックしてからブラウザで実行することができます。
編集:コメントで指摘されているように、これははるかに単純なバージョンです:Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
こうすることで、リストへの変換とリストからの変換をすべてスキップできます。
私は別の1行の解決策を見つけました、しかしそれはまだかなり遅いです(forサイクルよりも約100倍長くかかります - 6000 0の配列でテストされています)
String[] stringArray = ...
int[] out= Arrays.asList(stringArray).stream().map(Integer::parseInt).mapToInt(i->i).toArray();
これは何をするものです。
リストの場合:
List<Integer> intList
= stringList.stream().map(Integer::valueOf).collect(Collectors.toList());
配列の場合
int[] intArray = Arrays.stream(stringArray).mapToInt(Integer::valueOf).toArray();
また、使うことができます、
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
Integer[] array = list.stream()
.map( v -> Integer.valueOf(v))
.toArray(Integer[]::new);
私は前の答えではそれを見つけられませんでした、それで、Java 8とストリームで:
String[]
をInteger[]
に変換します。
Arrays.stream(stringArray).map(Integer::valueOf).toArray(Integer[]::new)