[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());

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s