Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按字母数字顺序(不区分大小写)对guava multimap(键和值)进行排序_Java_Guava_Multimap - Fatal编程技术网

Java 如何按字母数字顺序(不区分大小写)对guava multimap(键和值)进行排序

Java 如何按字母数字顺序(不区分大小写)对guava multimap(键和值)进行排序,java,guava,multimap,Java,Guava,Multimap,我有个人课: class Person { private String name; private String job; ... ... } 我有个人名单: personList.put(new Person("Pete","doctor")) personList.put(new Person("pete","doctor")) personList.put(new Person("Aaron","doctor")) personList.put(new Pe

我有个人课:

class Person {

    private String name;

    private String job;
    ... ...
}
我有个人名单:

personList.put(new Person("Pete","doctor"))
personList.put(new Person("pete","doctor"))
personList.put(new Person("Aaron","doctor"))
personList.put(new Person("Vivian","doctor"))
personList.put(new Person("Mary","teacher"))
我想按职务显示人员列表分组,姓名和职务均按字母数字顺序(不区分大小写)显示,如下数据格式

doctor
>>Aaron
>>Pete
>>pete
>>Vivian
teacher
>>Mary
目前,我正在这样做:

public enum PersonComparator implements Comparator<Person> {
    NAME_JOB_INSENSTIVE_ASC {

        @Override
        public int compare(final Person obj1, final Person obj2) {

            String compareObj1 = obj1.getName();
            String compareObj2 = obj2.getName();

            int compareValue = compareObj1.compareTo(compareObj2);
        int compareValueIgnoreCase = compareObj1.compareToIgnoreCase(compareObj2);

            if(compareValueIgnoreCase == 0) {
                return compareValue >= 0 ? 1 : -1;
            } else {
                return compareValueIgnoreCase>= 0 ? ++compareValueIgnoreCase
                                                  : --compareValueIgnoreCase;
            }
        }
    }
}

ListMultimap<String, Person> personTableList = Multimaps.index(personList,
        new Function<Person, String>() {
        @Override
        public String apply(Person person) {
            return person.getJob();
        }
    });
TreeMultimap<String, Person> personTableTree = TreeMultimap.create(Ordering.natural(),
            PersonComparator.NAME_JOB_INSENSTIVE_ASC);
personTableTree.putAll(personTableList);

model.addAttribute(RequestParameter.Person_TABLE, personTableTree.asMap());
public enum PersonComparator实现Comparator{
名称\u工作\u现场\u ASC{
@凌驾
公共整数比较(最终用户obj1、最终用户obj2){
字符串compareObj1=obj1.getName();
字符串compareObj2=obj2.getName();
int compareValue=compareObj1.compareTo(compareObj2);
int compareValueIgnoreCase=compareObj1.compareIgnoreCase(compareObj2);
if(compareValueIgnoreCase==0){
返回compareValue>=0?1:-1;
}否则{
返回compareValueIgnoreCase>=0?++compareValueIgnoreCase
:--比较价值观案例;
}
}
}
}
ListMultimap personTableList=Multimaps.index(personList,
新函数(){
@凌驾
公共字符串应用(个人){
return person.getJob();
}
});
TreeMultimap perontabletree=TreeMultimap.create(Ordering.natural(),
人员比较人员。姓名、工作、实习、ASC);
personTableTree.putAll(personTableList);
addAttribute(RequestParameter.Person_表,personTableTree.asMap());
我认为个人比较不容易阅读和理解。直接使用番石榴API有更好的主意吗?谢谢。

您可能需要使用

根据我收集的信息,您希望首先不区分大小写进行比较,然后如果大小写相等,则以区分大小写的方式进行比较

public int compare(final Person p1, final Person p2)
{
  return ComparisonChain.start()
      .compare(p1.getName().toLowerCase(), p2.getName().toLowerCase())
      .compare(p1.getName(), p2.getName())
      .result();
}

太酷了!排序方法比我的好得多。谢谢,格雷格:)