У меня есть public List<FriendProfile> friends = new ArrayList<FriendProfile>();
, Я инициализирую список друзей, читая информацию с сервера. Объект private int userPosition;
содержит int, называемый private int userPosition;
После того, как список друзей был инициализирован, я хотел бы отсортировать список друзей, userPosition
объект userPosition
с наивысшим значением userPosition
в индексе 0 списка, а затем отсортировать соответственно индекс 1 со вторым самым высоким userPosition
...
Я думаю, я мог бы написать алгоритм сортировки, но я ищу предварительно написанный код (возможно, у JDK есть несколько способов предложить?)
Помощь приветствуется!
Используйте 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>
.
Теперь нет необходимости в боксе (т.е. Нет необходимости создавать OBJECT
с использованием нового значения использования оператора, если он установлен с помощью 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) Для деактивации
Collections.sort(temp, new Comparator<XYZBean>()
{
@Override
public int compare(XYZBean lhs, XYZBean rhs) {
return Integer.valueOf(rhs.getDistance()).compareTo(lhs.getDistance());
}
});
Внедрить сравнимый интерфейс.
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);
Список будет отсортирован.
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();
}
}
Есть два способа сделать это.
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 реализует для алфавита. Второй полезен, если вам нужны разные заказы при разных обстоятельствах.
Если вы пишете Comparator, тогда вам нужно подумать, куда его поместить. Поскольку он не имеет состояния, вы можете записать его как Singleton или статический метод FriendProfile.
Используйте Collections.Sort
и напишите собственный Comparator
который сравнивается на основе userPosition
.
использовать метод Comparator with 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;
}
});
посмотреть ссылку