创建一个忽略大小写的TreeSet

iul*_*kia 6 java collections set sortedset comparator

来自Java Collections Framework的Java教程的练习要求使用SortedSet来消除参数的重复,并指定Comparator,以便在排序和标识set元素时忽略大小写.

这是确切的要求:"获取FindDupsexample并修改它以使用SortedSet而不是Set.指定一个Comparator,以便在排序和识别set元素时忽略大小写."

这是FindDupsExample:

import java.util.*;
public class FindDups {
public static void main(String[] args) {
    Set<String> s = new HashSet<String>();
    for (String a : args)
           s.add(a);
           System.out.println(s.size() + " distinct words: " + s);
}
}
Run Code Online (Sandbox Code Playgroud)

我能想出的最多可以达到预期的行为(通过考虑用小型大写字母写一次的单词来消除重复,而另一次用大大写字母作为副本来消除重复)是下面的代码,但我对如何使用比较器毫无头绪和SortedSet.我在我的例子中使用了SortedSet,但我可以很好地使用一个简单的Set:

public class FindDups {
public static void main(String[] args) {
    Set<String> s = new HashSet<String>();
    List<String> list = new ArrayList<String>();
    SortedSet<String> eliminatedDups = null;

    for (String a : args) {
           s.add(a);
           list.add(a.toLowerCase());
    }
    eliminatedDups = new TreeSet<String>(list);

    System.out.println(s.size() + " distinct words by taking into consideration the case: " + s);
    System.out.println(list.size() + " initial list translated into all small caps: " + list);
    System.out.println(eliminatedDups.size() + " distinct words by ignoring case: " + eliminatedDups);
}
Run Code Online (Sandbox Code Playgroud)

}

我怎样才能使用SortedSet和Comparator来获得所需的效果?

谢谢,


受到SJuan76的启发,终于拿出:

public class FindDupsFinal {
public static void main(String[] args) {
    SortedSet<String> eliminatedDups2 = new TreeSet<String>(IGNORE_CASE);        

    for (String a : args) {
           eliminatedDups2.add(a);
    }
    System.out.println(eliminatedDups2.size() + " distinct words by ignoring case: " + eliminatedDups2);
}

static final Comparator<String> IGNORE_CASE = new Comparator<String>() {
    public int compare(String s1, String s2) {
        return s1.compareToIgnoreCase(s2);
    }
};
Run Code Online (Sandbox Code Playgroud)

}

Lou*_*man 18

SortedSet<String> eliminatedDups =
   new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
Collections.addAll(eliminatedDups, args);
Run Code Online (Sandbox Code Playgroud)