У меня есть несортированный список с неизвестным количеством элементов в диапазоне 1000. Все эти элементы содержат метку, которая определяет, куда они должны идти.Чтобы не повторять каждый элемент списка несколько раз, я хочу разбить этот список на определенное количество подсписков, которые содержат только элементы определенных меток.
List<Item> allItems = getItemsFromSomewhere();
List<Item> itemsLabeledA1 = new ArrayList<>();
List<Item> itemsLabeledA2 = new ArrayList<>();
List<Item> itemsLabeledB1 = new ArrayList<>();
...
List<Item> itemsLabeledL3 = new ArrayList<>();
Чтобы еще больше усложнить проблему, некоторые изсписки требуют добавления диапазона элементов, поэтому каждый элемент помечен как-то вроде «A1», «A2», «A3».Эти списки требуют добавления каждого элемента с A-меткой.Однако не все ярлыки имеют эти сводные списки.Возможно, мне придется объединить все элементы, помеченные буквой «А», при этом не объединяя все элементы, помеченные буквой «В», и в то же время отсортировать в своих списках А1, В1 и т. Д.
Учитывая приведенный выше пример, как элегантно разделитьполный список за одну итерацию?Моей первоначальной мыслью было использование ifs или блока переключателей, но это ужасное решение.
allItems.forEach(item -> {
if (item.getLabel().contains("A1")) {
itemsLabeledA1.add(item);
allItemsLabeledA.add(item);
}
else if (item.getLabel().contains("B1")) itemsLabeledB1.add(item);
...
else if (item.getLabel().contains("L3")) itemsLabeledL3.add(item);
});
Есть ли лучший способ?