문제

글쎄, 나는 Treemap을 테스트했지만 문자열 비교에서 Ignorecase를 고려하지 않습니다. 사전을 주문하고 사건을 무시해야합니다. 다른 방법이 있습니까?

감사합니다. 그러나 또 다른 질문이 있습니다.

public final Comparator<Object> STR_IGN_CASE_COMP = new Comparator<Object>() {

    public int compare(Object h1, Object h2) {
            String s1 = h1.getId();
            String s2 = h2.getId();
            return s1.compareToIgnoreCase(s2);
    }
}; //STR_IGN_CASE_COMP

비교기를 어떻게 다른 대상으로 작업하기 위해 대학을 대학 화 할 수 있습니까? 모든 것이 getId () 메소드가 있다고 가정합니다.

고마워요, 마틴

도움이 되었습니까?

해결책

당신은 사용하고 싶습니다 Comparator 에서 TreeMap 건설자. 특히,보십시오 String.CASE_INSENSITIVE_ORDER.

TreeMap map = new TreeMap(String.CASE_INSENSITIVE_ORDER);

사용 Collator 또는 관습 Comparator 영어가 아닌 로케일 또는 더 복잡한 주문이 필요한 경우 더 잘 작동 할 수 있습니다.

다른 팁

가장 좋은 방법은 Collator를 사용하는 것입니다. Collator는 내장 수업으로 비슷한 수업을 할 수 있으므로 Treemap에 사용할 수 있습니다.

Collator를 사용하면 악센트에 민감하지 않은 경우 비교의 강도를 제어 할 수 있습니다.

Collator stringCollator = Collator.getInstance();
stringCollator.setStrength(Collator.PRIMARY); 
new TreeMap<String, String>(stringCollator)

문자열 케이스를 비교하는 비교기를 제공하십시오.

Treemap (비교기 C)

목록이 있다면 비교기가 포함 된 Collections.sort ()를 시도합니다. equals () 대신 string.equalsignorecase ()를 사용하는 자신의 비교기를 굴려야 할 수도 있습니다.

public static <T> void sort(List<T> list,
                        Comparator<? super T> c)

그러나 나는 올바른 길을 가고 있었다. 비교기를 취하는 Treemap 생성자를 사용해보십시오.

public TreeMap(Comparator<? super K> comparator)

예, 원하는 것은 비교기를 취하는 Treemap 생성자를 사용하는 것입니다. 비교를 사용하는 비교기를 만듭니다.

비교기를 어떻게 다른 대상으로 작업하기 위해 대학을 대학 화 할 수 있습니까? 모든 것이 getId () 메소드가 있다고 가정합니다.

당신은 a를 사용할 수 있어야합니다 Beancomparator.

나는 당신이 당신을 건설해야한다고 생각합니다 TreeMap 사용자 정의 비교기와 함께.

import java.text.Collator;
import java.util.Comparator;

class IgnoreCaseComp implements Comparator<String> {
  Collator col;

  IgnoreCaseComp() {
    col = Collator.getInstance();

    col.setStrength(Collator.PRIMARY);
  }

  public int compare(String strA, String strB) {
    return col.compare(strA, strB);
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top