ArrayList 정렬하는 방법
15 Mar 2019 | Android Java오름차순 정렬 예제
다음 예제는 숫자를 오름차순으로 정렬하는 예제입니다.
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(3);
list.add(7);
list.add(6);
list.add(10);
list.add(4);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 < o2) {
return -1;
} else if (o1 > o2) {
return 1;
}
return 0;
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
수정된 버전 1
데이터 타입이 단순한 Integer 형태이기 때문에 비교하는 구문을 아래와 같이 수정할 수도 있습니다.
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(3);
list.add(7);
list.add(6);
list.add(10);
list.add(4);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return (o1 - o2);
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
수정된 버전 2
또한 Java에서 제공하는 대부분의 데이터 타입들은 compareTo 인터페이스를 구현해놓았기 때문에 아래와 같은 코드도 사용가능합니다.
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(3);
list.add(7);
list.add(6);
list.add(10);
list.add(4);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
Comparable 인터페이스 구현
가장 간편한건 아래의 예제와 같이 Comparable 인터페이스를 구현하는 방법입니다.
public class Data implements Comparable {
private final int value;
public Data(int value) {
this.value = value;
}
public final int getValue() {
return this.value;
}
@Override
public int compareTo(Object o) {
return getValue() - ((Data) o).getValue();
}
}
이 경우는 아래와 같이 Collections.sort() 메소드에 별도의 매개변수없이 간편하게 정렬을 할 수 있습니다.
List<Data> list = new ArrayList<>(); list.add(new Data(3)); list.add(new Data(5)); list.add(new Data(4)); list.add(new Data(2)); Collections.sort(list);
파일명으로 오름 차순 정렬 예제
public void refresh(String path) {
mList.clear();
File directory = new File(path);
File[] files = directory.listFiles();
for (int i = 0; i < files.length; i++) {
mList.add(files[i]);
}
Comparator<File> cmpAsc = (o1, o2) -> o1.getName().compareTo(o2.getName());
Collections.sort(mList, cmpAsc);
notifyDataSetChanged();
}
Child Node 각도에 따라 정렬하는 예제
각도는 12시 방향을 원점으로 해서 반시계 방향으로 구했습니다.
void sort() {
Collections.sort(childList, (o1, o2) -> {
int px = left() + width() / 2;
int py = top + height() / 2;
int cx1 = o1.left() + o1.width() / 2;
int cy1 = o1.top() + o1.height() / 2;
int cx2 = o2.left() + o2.width() / 2;
int cy2 = o2.top() + o2.height() / 2;
int dx1 = cx1 - px;
int dy1 = cy1 - py;
int dx2 = cx2 - px;
int dy2 = cy2 - py;
double degree1 = Math.atan2(dx1, dy1);
double degree2 = Math.atan2(dx2, dy2);
if (degree1 < degree2) {
return -1;
} else if (degree1 > degree2) {
return 1;
} else {
return 0;
}
});
}