我有public List<FriendProfile> friends = new ArrayList<FriendProfile>();
。我通过从服务器读取信息来初始化好友列表。 FriendProfile对象包含一个名为private int userPosition;
一旦朋友列表被初始化,我想通过在列表的索引0处具有最高userPosition
的FriendProfile对象来排序朋友列表,然后相应地排序,索引1具有第二高userPosition
...
我想我可以写一个排序算法,但我正在寻找预先编写的代码(也许JDK有一些提供的方法?)
非常感谢帮助!
答案 0 :(得分:6)
使用Collections.sort()
并指定Comparator
:
Collections.sort(friends,
new Comparator<FriendProfile>()
{
public int compare(FriendProfile o1,
FriendProfile o2)
{
if (o1.getUserPosition() ==
o2.getUserPosition())
{
return 0;
}
else if (o1.getUserPosition() <
o2.getUserPosition())
{
return -1;
}
return 1;
}
});
或让FriendProfile
实施Comparable<FriendProfile>
。
答案 1 :(得分:1)
实施可比接口。
class FriendProfile implements Comparable<FriendProfile> {
private int userPosition;
@Override
public int compareTo(FriendProfile o) {
if(this.userPosition > o.userPosition){
return 1;
}
return 0;
}
}
只需调用Collection.sort(List)方法。
FriendProfile f1=new FriendProfile();
f1.userPosition=1;
FriendProfile f2=new FriendProfile();
f2.userPosition=2;
List<FriendProfile> list=new ArrayList<FriendProfile>();
list.add(f2);
list.add(f1);
Collections.sort(list);
列表将被排序。
答案 2 :(得分:1)
现在不需要拳击(即无需使用新的运算符创建OBJECT
使用valueOf使用compareTo of Collections.Sort ..)
1)升序
Collections.sort(temp, new Comparator<XYZBean>()
{
@Override
public int compare(XYZBean lhs, XYZBean rhs) {
return Integer.valueOf(lhs.getDistance()).compareTo(rhs.getDistance());
}
});
1)对于Deascending order
Collections.sort(temp, new Comparator<XYZBean>()
{
@Override
public int compare(XYZBean lhs, XYZBean rhs) {
return Integer.valueOf(rhs.getDistance()).compareTo(lhs.getDistance());
}
});
答案 3 :(得分:0)
使用Collections.Sort
并撰写基于Comparator
进行比较的自定义userPosition
。
答案 4 :(得分:0)
将Comparator与Collections.sort方法一起使用
java.util.Collections.sort(list, new Comparator<FriendProfile >(){
public int compare(FriendProfile a, FriendProfile b){
if(a.getUserPosition() > b.getUserPosition()){
return 1;
}else if(a.getUserPosition() > b.getUserPosition()){
return -1;
}
return 0;
}
});
请参阅此link
答案 5 :(得分:0)
有两种方法可以做到这一点。
1。 FriendProfile可以实现Comparable接口。
public class FriendProfile implements Comparable<FriendProfile>
{
public int compareTo(FriendProfile that)
{
// Descending order
return that.userPosition - this.userPosition;
}
}
...
Collections.sort(friendProfiles);
2。 你可以写一个比较器。
public class FriendProfileComparator implements Comparator<FriendProfile>
{
public int compare(FriendProfile fp1, FriendProfile fp2)
{
// Descending order
return fp2.userPosition - fp1.userPosition;
}
}
...
Collections.sort(friendProfiles, new FriendProfileComparator());
比较对象而不是基元时,请注意您可以委托包装对象compareTo。例如return fp2.userPosition.compareTo(fp1.userPosition)
如果对象具有您想要实现的自然顺序,则第一个很有用。例如Integer实现数字顺序,String实现字母顺序。如果您在不同情况下需要不同的订单,则第二个非常有用。
如果你写一个比较器,那么你需要考虑把它放在哪里。由于它没有状态,你可以把它写成Singleton,或者是FriendProfile的静态方法。
答案 6 :(得分:0)
You can use
java.lang.Comparable接口,如果您只想以单向排序。
But if you want to sort
以多种方式使用java.util.Compartor接口。
例如:
要在其roll_nos
上对其对象进行排序的类public class Timet {
String name;
int roll_no;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getN() {
return roll_no;
}
public void setN(int n) {
this.roll_no = n;
}
public Timet(String name, int n) {
this.name = name;
this.roll_no = n;
}
public String toString(){
return this.getName();
}
}
排序类:
public class SortClass {
public void go(){
ArrayList<Timet> arr = new ArrayList<Timet>();
arr.add(new Timet("vivek",5));
arr.add(new Timet("alexander",2));
arr.add(new Timet("catherine",15));
System.out.println("Before Sorting :"+arr);
Collections.sort(arr,new SortImp());
System.out.println("After Sorting :"+arr);
}
class SortImp implements Comparator<Timet>{
@Override
public int compare(Timet t1, Timet t2) {
return new Integer(t1.getN()).compareTo (new Integer((t2.getN())));
}
}
public static void main(String[] args){
SortClass s = new SortClass();
s.go();
}
}