В настоящее время у меня есть ArrayList
из int[]
. int[]
имеет 5 элементов. Я хочу, чтобы отсортировать этот ArrayList
на основе 2-го и 4-го индексов моего int[]
. Как это сделать на Java?Сортировка ArrayList из Int [] по нескольким индексам
ответ
package com.sandbox;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Sandbox {
public static void main(String[] args) {
List<int[]> list = new ArrayList<int[]>();
list.add(new int[]{1, 4, 6, 8, 9});
list.add(new int[]{1,3,6,7,8});
list.add(new int[]{1,4,6,7,9});
Collections.sort(list, new Comparator<int[]>() {
public int compare(int[] o1, int[] o2) {
int compare = Integer.compare(o1[1], o2[1]);
//if they're equal on this element then compare the next element
return compare == 0 ? Integer.compare(o1[3], o2[3]) : compare;
}
});
for (int[] ints : list) {
System.out.println(Arrays.toString(ints));
}
}
}
Это выход:
[1, 3, 6, 7, 8] [1, 4, 6, 7, 9] [1, 4, 6, 8 , 9]
Ahh блестящий спасибо большое! ... как бы я продлить это, если бы я хотел сортировать по ряду параметризованных индексов, то есть не обязательно 2 и 4? объявить конструктор? – user1950055
Это действительно зависит от того, как вы собираетесь их пропускать. Но если бы я догадался, я бы извлек «Comparator» в свой класс и предоставил ему конструктор, на котором вы передадите индексы, которые хотите Сортировать по. –
Я не могу назвать Integer.compare()? – user1950055
Вам нужен собственный компаратор, как этот
class IntArrayComparator implements Comparator<int[]> {
private final int[] ai;
IntArrayComparator(int[] ai) {
this.ai = ai;
}
@Override
public int compare(int[] a1, int[] a2) {
for (int i : ai) {
int c = Integer.compare(a1[i], a2[i]);
if (c != 0) {
return c;
}
}
return 0;
}
}
отметить, что Integer.compare (целое, целое) я s добавлено в Java 7, в более ранних версиях используйте
int c = (a1[i] < a2[i]) ? -1 : a1[i] == a2[i] ? 0 : 1;
Ahh благодарит только что это реализовано, но я не могу сказать, что Integer.compare ... любая идея почему? – user1950055
С 1,7 только –
- 1. Сортировка по нескольким индексам
- 2. Сортировка списка по нескольким индексам и весам
- 3. Сортировка ArrayList по нескольким свойствам
- 4. Поиск по нескольким индексам
- 5. Поиск массива по нескольким индексам
- 6. elasticsearch скоринг по нескольким индексам
- 7. indexeddb сортировать по нескольким индексам
- 8. Azure Поиск по нескольким индексам
- 9. ElasticSearch pagination по нескольким индексам
- 10. Сортировка базы ArrayList по нескольким атрибутам
- 11. Панель инструментов Kibana по нескольким индексам
- 12. Lucene - сравнение данных по нескольким индексам
- 13. Сортировка по нескольким значениям
- 14. Цитирование по нескольким индексам в Python
- 15. Фильтрация по нескольким индексам с использованием ElasticSearch
- 16. Поиск по нескольким индексам в ElasticSearch (Tire)
- 17. Сравните ранжирование запроса Алголии по нескольким индексам
- 18. Сортировка JTable по нескольким критериям
- 19. ArrayList из HashSets, итерации по индексам Я не указываю?
- 20. Сортировка по нескольким столбцам
- 21. Производительность запросов MySQL по двум индексам + сортировка
- 22. Сортировка по нескольким полям
- 23. Сортировка по нескольким столбцам
- 24. Сортировка по нескольким полям
- 25. Сортировка по нескольким данным
- 26. Сортировка массива по нескольким критериям
- 27. Сортировка объекта по индексам массива в JavaScript?
- 28. Сортировка многомерного массива по заданным индексам - PHP?
- 29. Сортировка объектов по нескольким атрибутам
- 30. Elasticsearch получает несколько документов по uids по нескольким индексам
Можете вы точно объяснить, что именно вы пытаетесь сделать? Что означает «на основе 2-го и 4-го индексов»? – Jeffrey
Так, например, если бы у меня был следующий список массивов [1,4,6,8,9] [1,3,6,7,8] [1,4,6,7,9], заказ был бы [1 , 3,6,7,8] [1,4,6,7,9] [1,4,6,8,9], т.е. я сначала сортирую по второму индексу, и если это то же самое, то сортировка по 4-му index ... – user1950055