Java中如何按对象的字符串值排序

Java中如何按对象的字符串值排序,java,comparison,Java,Comparison,我有一个JavaBean类,我想通过一个字符串类型的bean属性对这些bean的列表进行排序。我该怎么做呢?要么实现类型本身,通过比较两个字符串实现compareTo方法,要么实现一个通过字符串再次进行比较的方法 使用第一种方法,您就可以直接使用Collections.sort();第二种方法是使用Collections.sort(collection,newfooparator()) 例如: public class Foo { public String getBar() {

我有一个JavaBean类,我想通过一个字符串类型的bean属性对这些bean的列表进行排序。我该怎么做呢?

要么实现类型本身,通过比较两个字符串实现
compareTo
方法,要么实现一个通过字符串再次进行比较的方法

使用第一种方法,您就可以直接使用
Collections.sort()
;第二种方法是使用Collections.sort(collection,newfooparator())

例如:

public class Foo {
    public String getBar() {
        ...
    }
}

public class FooComparatorByBar implements Comparator<Foo> {
    public int compare(Foo x, Foo y) {
        // TODO: Handle null values of x, y, x.getBar() and y.getBar(),
        // and consider non-ordinal orderings.
        return x.getBar().compareTo(y.getBar());
    }
}
公共类Foo{
公共字符串getBar(){
...
}
}
公共类FooComparatorByBar实现了Comparator{
公共整数比较(Foo x,Foo y){
//TODO:处理x、y、x.getBar()和y.getBar()的空值,
/和考虑非序数排序。
返回x.getBar().compareTo(y.getBar());
}
}

要么实现类型本身,通过比较两个字符串实现
compareTo
方法,要么实现一个再次通过字符串进行比较的方法

使用第一种方法,您就可以直接使用
Collections.sort()
;第二种方法是使用Collections.sort(collection,newfooparator())

例如:

public class Foo {
    public String getBar() {
        ...
    }
}

public class FooComparatorByBar implements Comparator<Foo> {
    public int compare(Foo x, Foo y) {
        // TODO: Handle null values of x, y, x.getBar() and y.getBar(),
        // and consider non-ordinal orderings.
        return x.getBar().compareTo(y.getBar());
    }
}
公共类Foo{
公共字符串getBar(){
...
}
}
公共类FooComparatorByBar实现了Comparator{
公共整数比较(Foo x,Foo y){
//TODO:处理x、y、x.getBar()和y.getBar()的空值,
/和考虑非序数排序。
返回x.getBar().compareTo(y.getBar());
}
}

使用自定义比较器

import java.util.*;

class Bean {
    public final String name;
    public final int value;

    public Bean(final String name, final int value) {
        this.name = name;
        this.value = value;
    }

    @Override
    public String toString() {
        return name + " = " + value;
    }
}

public class SortByProp {
    private static List<Bean> initBeans() {
        return new ArrayList<Bean>(Arrays.asList(
            new Bean("C", 1),
            new Bean("B", 2),
            new Bean("A", 3)
        ));
    }

    private static void sortBeans(List<Bean> beans) {
        Collections.sort(beans, new Comparator<Bean>() {
            public int compare(Bean lhs, Bean rhs){ 
                return lhs.name.compareTo(rhs.name);
            }
        });
    }


    public static void main(String[] args) {
        List<Bean> beans = initBeans();
        sortBeans(beans);
        System.out.println(beans);
    }
}
import java.util.*;
类豆{
公共最终字符串名;
公共最终整数值;
公共Bean(最终字符串名、最终int值){
this.name=名称;
这个值=值;
}
@凌驾
公共字符串toString(){
返回名称+“=”+值;
}
}
公共类SortByProp{
私有静态列表initBeans(){
返回新的ArrayList(Arrays.asList(
新豆(“C”,1),
新豆(“B”,2),
新豆(“A”,3)
));
}
私有静态void sortBeans(列表bean){
Collections.sort(bean,newcomparator(){
公共int比较(Bean lhs,Bean rhs){
返回lhs.name.compareTo(rhs.name);
}
});
}
公共静态void main(字符串[]args){
listbeans=initBeans();
菜豆;
System.out.println(bean);
}
}

使用自定义比较器

import java.util.*;

class Bean {
    public final String name;
    public final int value;

    public Bean(final String name, final int value) {
        this.name = name;
        this.value = value;
    }

    @Override
    public String toString() {
        return name + " = " + value;
    }
}

public class SortByProp {
    private static List<Bean> initBeans() {
        return new ArrayList<Bean>(Arrays.asList(
            new Bean("C", 1),
            new Bean("B", 2),
            new Bean("A", 3)
        ));
    }

    private static void sortBeans(List<Bean> beans) {
        Collections.sort(beans, new Comparator<Bean>() {
            public int compare(Bean lhs, Bean rhs){ 
                return lhs.name.compareTo(rhs.name);
            }
        });
    }


    public static void main(String[] args) {
        List<Bean> beans = initBeans();
        sortBeans(beans);
        System.out.println(beans);
    }
}
import java.util.*;
类豆{
公共最终字符串名;
公共最终整数值;
公共Bean(最终字符串名、最终int值){
this.name=名称;
这个值=值;
}
@凌驾
公共字符串toString(){
返回名称+“=”+值;
}
}
公共类SortByProp{
私有静态列表initBeans(){
返回新的ArrayList(Arrays.asList(
新豆(“C”,1),
新豆(“B”,2),
新豆(“A”,3)
));
}
私有静态void sortBeans(列表bean){
Collections.sort(bean,newcomparator(){
公共int比较(Bean lhs,Bean rhs){
返回lhs.name.compareTo(rhs.name);
}
});
}
公共静态void main(字符串[]args){
listbeans=initBeans();
菜豆;
System.out.println(bean);
}
}
使用,它只是

Collections.sort(list, Ordering.natural().compose(Functions.toStringFunction()));
使用,它只是

Collections.sort(list, Ordering.natural().compose(Functions.toStringFunction()));

可能的重复:可能的重复:那应该是比较器而不是比较器吗?那应该是比较器而不是比较器吗?