web-dev-qa-db-ja.com

最後に1つの要素で並べ替え

オブジェクトのリストがあり、属性のアルファベット順に並べ替えたい。しかし、この属性が特定の文字列に一致する場合、例外ルールを追加したいと思います。例えば:

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>]
15
bpereira

コンパレータで「Unassigned」をアルファベットの終わりの文字列に置き換えるだけです。

Comparator.comparing(car -> car.getName().equals("Unassigned") ? "ZZZ" : car.getName())
0
MikeFHay

または、「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の数を追加します。

0
achAmháin