Archiwum dla Luty 2012
[Java] Porównywanie obiektów java.lang.String
Zdałem sobie sprawę z faktu, że mój blog wygląda ma martwy. Więc żeby nieco zatrzeć to wrażenie, oto przydatny drobiazg – komparator dla ciągów znaków uwzględniający możliwość, że mogą mieć wartość null
package com.jarekprzygodzki.utils;
import java.util.Comparator;
/**
* @author Jarosław Przygódzki <jarek.przygodzki@gmail.com>
*/
public class NullAwareStringComparator implements Comparator<String> {
private final boolean nullsFirst;
private static final Comparator<String> nullsFirstComparator =
new NullAwareStringComparator(true);
private static final Comparator<String> nullsLastComparator =
new NullAwareStringComparator(false);
private NullAwareStringComparator(boolean nullsFirst) {
this.nullsFirst = nullsFirst;
}
private NullAwareStringComparator() {
this(/* nullsFirst */false);
}
@Override
public int compare(String s1, String s2) {
return nullsFirst ? compareNullsFirst(s1, s2) : compareNullsLast(s1, s2);
}
private static int compareNullsFirst(String s1, String s2) {
if (s1 == null) {
return s2 == null ? 0 : -1;
}
if (s2 == null) {
return 1;
}
return s1.compareTo(s2);
}
private static int compareNullsLast(String s1, String s2) {
if (s1 == null) {
return s2 == null ? 0 : 1;
}
if (s2 == null) {
return -1;
}
return s1.compareTo(s2);
}
public static Comparator<String> nullsFirst() {
return nullsFirstComparator;
}
public static Comparator<String> nullsLast() {
return nullsLastComparator;
}
}
Najprostsze zastosowanie tego komparatora to oczywiście sortowanie kolekcji
Collections.sort(listOfStringsToBeSorted, NullAwareComparator.nullsLast());