Получить элемент с наивысшим приоритетом на основе другого списка в Java - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть список приоритетов

List<String> priorities = Arrays.asList("NV","PH","OO","DR");

И у меня есть список предметов List<Item> availableItems, где у предмета есть атрибут с именем type, который может быть одним из значений из первого списка.

Итак, я работаю над методом, который возвращает один элемент (самый высокий приоритет), я что-то делал с компаратором и сортировкой, но я читал об этом, и мне сказали, что это занимает много времени, так как availableItems может иметь много элементов, поэтому это может быть O(NLogN).

Чего я хочу добиться, так это если есть элемент с type NV return, поскольку это самый высокий приоритет Если не один с PH и т. д., и если нет ни одного, вернуть любой элемент списка, так как их нет, но без использования компараторов или стоимость не высока

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Я бы предложил использовать PriorityQueue с индексным компаратором:

public static <T> Comparator<T> comparatorByIndex(List<T> list) {
  Map<T, Integer> priority = IntStream.range(0, list.size()).boxed().collect(Collectors.toMap(list::get, Function.identity()));
  return Comparator.comparing(k -> priority.getOrDefault(k, Integer.MAX_VALUE));
}

и получить строку с наивысшим приоритетом, например:

List<String> priorities = Arrays.asList("NV","PH","OO","DR");
Queue<String> priorityOrder = new PriorityQueue<>(comparatorByIndex(priorities));
priorityOrder.addAll(availableItems);

String highestPriority = priorityOrder.poll();
1 голос
/ 22 апреля 2020

На основе @ Gilbert Le Blan c комментария.

TreeMap<Integer, List<Item0>> groupByType = availableItems.stream()
          .collect(Collectors.groupingBy(item -> priorities.indexOf(item.getType()),
                                                TreeMap::new, Collectors.toList()));

System.out.println(groupByType.firstEntry().getValue().get(0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...