MAP 의 Keys by IgnoreCase를 정렬하십시오.
-
18-09-2019 - |
문제
글쎄, 나는 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);
}
}