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