likemii
@likemii (mii)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Stream APIを利用し、String型をInteger型に変換した後、sortedメソッドにて降順に設定できるのか

Q&A

Closed

質問内容

mapToIntメソッドでString型をInteger型に変換した後、sortedメソッドにて昇順に設定はできるが降順だとエラーになるのはなぜでしょうか?

Stream APIを学習しており、SpringStarterProjectにて下記のコードを入力したところ昇順では正常にコンパイルしましたが降順だとエラーになりました。
エラーとなる理由を教えていただきたいです。

処理内容

package test2;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class StreamMapToInt{
    public static void main(String[] args) {
        List<String> numbers = Arrays.asList("1", "2", "3", "4", "5");
        numbers.stream()
            .mapToInt(Integer :: parseInt)
            .sorted(Comparator.reverseOrder())
            .forEach(i -> System.out.println(i));
    }
}

該当するソースコード

.sorted(Comparator.reverseOrder())

自分で試したこと

出てくるエラーメッセージを元に引数を消すと昇順でコンパイルが可能。
⇒Remove argument to much 'sorted()'

0

1Answer

mapToInt() が返す IntStream は引数を取る sorted() を実装していないからです。

IntStream はプリミティブな int 型に最適化されたストリームで、 Stream とはインターフェースが多少異なります。

降順にソートするなら、map() から Integer を返すか IntStreamboxed() を呼ぶかして Stream<Integer> を作ってください。

参考:

1Like

Comments

  1. @likemii

    Questioner

    ご回答頂き有難うございます。無事解決しました。

Your answer might help someone💌