ハインドForsum:
以下のように:
IntStream iStream = IntStream.range(1,4);
iStream.forEach(System.out::print);
List list1 = iStream.collect(Collectors.toList());//error!
Javaの1.8コンパイラは、型推論のエラーが発生します。同様のコードでは、String型のために働くことができます:
List<String> ls = new ArrayList<>();
ls.add("abc");
ls.add("xyz");
List list2 = ls.stream().collect(Collectors.toList());
どうして?IntStream / LongStream / DoubleStreamは、他のタイプのように同じように動作しないのか?どのように私のコンパイルエラーを修正するには?
なスロー:
IntStream
(他のプリミティブストリームと一緒に)を持たないcollect(Collector)
方法を。その収集方法は次のとおりですcollect(Supplier,ObjIntConsumer,BiConsumer)
。
あなたは、収集したい場合int
にSをList
あなたが行うことができます。
List<Integer> list = IntStream.range(0, 10).collect(ArrayList::new, List::add, List::addAll);
それとも、呼び出すことができますboxed()
変換することIntStream
にStream<Integer>
:
List<Integer> list = IntStream.range(0, 10).boxed().collect(Collectors.toList());
両方のオプションは、プリミティブボックスになるint
にsのInteger
あなたまである使用したいのでSを、。個人的に、私は2番目のオプションは単純かつ明確に見つけます。