オブジェクトのリストがあり、属性のアルファベット順に並べ替えたい。しかし、この属性が特定の文字列に一致する場合、例外ルールを追加したいと思います。例えば:
public class Car {
String name;
}
List<Car> cars = asList(
new Car("Unassigned"),
new Car("Nissan"),
new Car("Yamaha"),
new Car("Honda"));
List<Car> sortedCars = cars
.stream
.sorted(Comparator.comparing(Car::getName))
.collect(Collectors.toList());
cars.name == "Unassigned"
その後、この車はリストの最後にとどまるはずであり、結果は次のようになります。
[Car<Honda>, Car<Nissan>, Car<Yamaha>, Car<Unassigned>]
コンパレータで「Unassigned」をアルファベットの終わりの文字列に置き換えるだけです。
Comparator.comparing(car -> car.getName().equals("Unassigned") ? "ZZZ" : car.getName())
または、「Unassigned」のすべてのインスタンスを削除し、後にList
の末尾にいくつでも追加します。例えば:
int numberOfUnassigned = 0;
for (Iterator<Car> iterator = sortedCars.iterator(); iterator.hasNext();) {
String str = iterator.next().getName();
if (str.equals("Unassigned")) {
iterator.remove();
numberOfUnassigned++;
}
}
最後にnumberOfUnassigned
の数を追加します。