Vishwaラトナ:
私はこのような色のリストを持っています:
ピンク、ブルー、レッド、ブルー、グレー、グリーン、パープル、黒...等
List<String> listOfColors = Arrays.asList("Pink", "Blue", "Red", "blue", "Grey", "green", "purple", "black");
いくつかの中間の操作は、今私は、私はそれらを順にソートしたいフィルタ結果が残っています、いくつかの果物の色をフィルタリングのようにあります。
青、黒、青、グレー、グリーン、ピンク、パープル、レッド
私が試してみました :
List<String> collect = listOfColors.stream().sorted(String::compareToIgnoreCase)
.collect(Collectors.toList());
期待通りには動作しません。
出力は以下の通りであります:
黒、青、青、緑、グレー、ピンク、パープル、レッド
私は次のことをしたいです:
青、黒、青、グレー、グリーン、ピンク、パープル、レッド
DanielBK:
私の解決策を使用して、2つのステップで並べ替えを使用することであるComparator.thenComparing()
方法を。
まず、ケースのみを無視し、最初の文字で文字列を比較します。だから、同じ最初の文字(何があった場合)とのグループは、これまでにソートされていないまま。そして、第二段階では、これらのソートされていないサブグループをソートするために、通常のアルファベット順のソートを適用します。
List<String> listOfColors = Arrays.asList("Pink", "Blue", "Red", "blue", "Grey", "green", "purple", "black");
Comparator<String> comparator = Comparator.comparing(s ->
Character.toLowerCase(s.charAt(0)));
listOfColors.sort(comparator.thenComparing(Comparator.naturalOrder()));
System.out.println(listOfColors);
多分それはまだ最適化することができますが、それは望ましい結果が得られます。
[Blue, black, blue, Grey, green, Pink, purple, Red]