Как отсортировать двух массивов по размеру в новый массив - PullRequest
0 голосов
/ 18 июня 2009

У меня есть два объекта, каждый с идентификатором и списком. Мне бы хотелось, чтобы третий массив массивов сортировал этот объект по размеру списка. И все же у меня есть соответствующий идентификатор вместе со списком

1 Ответ

1 голос
/ 18 июня 2009

Вот подход:

  1. Создайте Comparator, который может сравнивать две пары "id / list" - в этом случае мы сравниваем размеры списка компонента списка.

  2. Создайте ArrayList из этих «пар идентификатора / списка».

  3. Используйте метод Collections.sort для сортировки ArrayList в соответствии с Comparator.

Если я правильно понимаю, есть пара id / list. Вот что я сделал:

class IdListPair {
  int id;
  List<?> list;

  IdListPair(int id, List<?> list) {
    this.id = id;
    this.list = list;
  }

  public String toString() {
    return "id: " + id + "; list: " + list;
  }
}

IdListPair предоставляет конструктор для создания пары id / list и метод toString, который будет использован позже для отображения результатов сортировки.

Затем у нас будет раздел, который создает ArrayList и сортирует список, используя Comparator:

List<IdListPair> pairList = new ArrayList<IdListPair>();
pairList.add(new IdListPair(0, Arrays.asList(1, 2, 3)));
pairList.add(new IdListPair(1, Arrays.asList(1)));
pairList.add(new IdListPair(2, Arrays.asList(1, 2)));

System.out.println("Before: " + pairList);

Collections.sort(pairList, new Comparator<IdListPair>() {
  public int compare(IdListPair o1, IdListPair o2) {
    return o1.list.size() - o2.list.size();
  }

  public boolean equals(Object o) {
    return false;
  }
});

System.out.println("After: " + pairList);

Сначала был создан ArrayList с IdListPair, который имеет списки различной длины.

Затем метод Collections.sort выполняет сортировку в соответствии с правилами, предоставленными Comparator. Класс, реализующий Comparator, должен предоставить методы compare и equals.

Здесь был создан Comparator, поэтому он будет сравнивать size list, который каждый объект IdListPair содержит в методе compare. Метод equals является фиктивным, поскольку здесь он не используется.

Большая часть усилий будет направлена ​​на написание правильного метода compare, поэтому сортировщик Collections.sort сможет правильно отсортировать список.

Результаты были следующими:

Before: [id: 0; list: [1, 2, 3], id: 1; list: [1], id: 2; list: [1, 2]]
After: [id: 1; list: [1], id: 2; list: [1, 2], id: 0; list: [1, 2, 3]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...