Java получить String CompareTo в качестве объекта сравнения

matches возвращает true, если вся строка соответствует заданному шаблону. find пытается найти подстроку, которая соответствует шаблону.

29
задан Georges Oates Larsen 4 August 2012 в 00:09
поделиться

5 ответов

Класс Arrays имеет версии sort() и binarySearch(), для которых не требуется Comparator.. Например, вы можете использовать версию Arrays.sort(), которая просто принимает массив объектов . Эти методы вызывают метод compareTo() объектов в массиве.

18
ответ дан Code-Apprentice 4 August 2012 в 00:09
поделиться

Решение для Java 8 основано на java.util.Comparator.comparing (...) :

Comparator<String> c = Comparator.comparing(String::toString);

или

Comparator<String> c = Comparator.comparing((String x) -> x);
26
ответ дан Antonio 4 August 2012 в 00:09
поделиться

Хорошо, это несколько лет спустя, но с java 8 вы можете использовать Comparator.naturalOrder ():

http://docs.oracle.com/javase/8/docs/api/ java / util / Comparator.html # naturalOrder -

Из javadoc:

static <T extends Comparable<? super T>> Comparator<T> naturalOrder()

Возвращает компаратор, который сравнивает сопоставимые объекты в естественном порядке. Возвращенный компаратор является сериализуемым и выдает исключение NullPointerException при сравнении нуля.

6
ответ дан brunesto 4 August 2012 в 00:09
поделиться

Это общий Comparator для любого вида Comparable объекта, а не только String:

package util;

import java.util.Comparator;

/**
 * The Default Comparator for classes implementing Comparable.
 *
 * @param <E> the type of the comparable objects.
 *
 * @author Michael Belivanakis (michael.gr)
 */
public final class DefaultComparator<E extends Comparable<E>> implements Comparator<E>
{
    @SuppressWarnings( "rawtypes" )
    private static final DefaultComparator<?> INSTANCE = new DefaultComparator();

    /**
     * Get an instance of DefaultComparator for any type of Comparable.
     *
     * @param <T> the type of Comparable of interest.
     *
     * @return an instance of DefaultComparator for comparing instances of the requested type.
     */
    public static <T extends Comparable<T>> Comparator<T> getInstance()
    {
        @SuppressWarnings("unchecked")
        Comparator<T> result = (Comparator<T>)INSTANCE;
        return result;
    }

    private DefaultComparator()
    {
    }

    @Override
    public int compare( E o1, E o2 )
    {
        if( o1 == o2 )
            return 0;
        if( o1 == null )
            return 1;
        if( o2 == null )
            return -1;
        return o1.compareTo( o2 );
    }
}

Как использовать с String:

Comparator<String> stringComparator = DefaultComparator.getInstance();
10
ответ дан Mike Nakis 4 August 2012 в 00:09
поделиться

Кроме того, если вам нужно сравнение без учета регистра, в последних версиях Java класс String содержит поле public static final с именем CASE_INSENSITIVE_ORDER, которое имеет тип Comparator<String>, как я недавно узнал. Таким образом, вы можете выполнить свою работу, используя String.CASE_INSENSITIVE_ORDER.

6
ответ дан Mike Nakis 4 August 2012 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: