JavaのIntStreamはなぜ、コレクト(Collectors.toList())、コンパイルエラーを使用することはできませんか?

ハインド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()変換することIntStreamStream<Integer>

List<Integer> list = IntStream.range(0, 10).boxed().collect(Collectors.toList());

両方のオプションは、プリミティブボックスになるintにsのIntegerあなたまである使用したいのでSを、。個人的に、私は2番目のオプションは単純かつ明確に見つけます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=184317&siteId=1