Tom*_*and 25 java sorting collections
假设我有一个名为Foo的用户定义的Java类,例如:
public class Foo
{
private String aField;
@Override
public String toString()
{
return aField;
}
}
Run Code Online (Sandbox Code Playgroud)
和集合如:
List<Foo> aList;
Run Code Online (Sandbox Code Playgroud)
我想要做的是根据每个成员返回的'.toString()'值按字母顺序对列表进行排序.
我尝试过使用Collections.sort()方法,但结果不是我正在尝试的.为了做到这一点,我需要做什么?
Dan*_*yer 67
Collections.sort(fooList,
new Comparator<Foo>()
{
public int compare(Foo f1, Foo f2)
{
return f1.toString().compareTo(f2.toString());
}
});
Run Code Online (Sandbox Code Playgroud)
假设toString永远不会返回null,并且列表中没有空项.
Cow*_*wan 17
通过订购,google-collections非常简单:
Collections.sort(list, Ordering.usingToString());
Run Code Online (Sandbox Code Playgroud)
引入一个完整的第三方库只是为了使用一些你可以用比较器(正如其他人提供的那样)平凡写的东西值得吗?不,但谷歌收藏是如此酷,你会想要它还有其他一些原因.
在排序方面,您还可以轻松完成倒车等操作:
Ordering.usingToString().reverse();
Run Code Online (Sandbox Code Playgroud)
或打破关系:
Ordering.usingToString().compound(someOtherComparator);
Run Code Online (Sandbox Code Playgroud)
或处理空值:
Ordering.usingToString().nullsFirst();
Run Code Online (Sandbox Code Playgroud)
等等,但是那里有更多的东西(当然不仅仅是排序相关的),这导致了真正富有表现力的代码.看看这个!
public class Foo
implements Comparable<Foo>
{
private String aField;
public Foo(String s)
{
aField=s;
}
public String getAField()
{
return aField;
}
public int compareTo(Foo other)
{
return getAField().compareTo(other.getAField());
}
@Override
public String toString()
{
return getAField();
}
}
Run Code Online (Sandbox Code Playgroud)
然后
Collections.sort(名单);
小智 5
我会做一些与皮埃尔非常相似的事情:
public class Foo implements Comparable<Foo>
{
private String aField;
@Override
public String toString()
{
return aField;
}
public int compareTo(Foo o)
{
return this.toString().compareTo(o.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
然后,像皮埃尔一样,我会Collections.sort(list)像皮埃尔建议的那样使用.
Java 8版本:
list.sort(Comparator.comparing(Object::toString));
Run Code Online (Sandbox Code Playgroud)
或流式传输:
List<Foo> sortedList = unsortedList
.stream()
.sorted(Comparator.comparing(Object::toString)))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88365 次 |
| 最近记录: |