private <T extends TypeValue> List<T> sortTypes(List<T> list, Map<T, Integer> map) { List<T> sortedList = new ArrayList<>(); sortedList.addAll(list); sortedList.sort( (o1, o2) -> { Integer o1Count = map.get(o1); Integer o2Count = map.get(o2); if (o1Count != null || o2Count != null) { if (o1Count == null || ApplicationProperties.EMPTY.equals(o1.getCode())) return -1; if (o2Count == null || ApplicationProperties.EMPTY.equals(o2.getCode())) return 1; return o2Count.compareTo(o1Count); } return o1.getName().compareTo(o2.getName()); }); return sortedList; }
/** * Проверяет наличие объекта в списке * * @param value объект, который проверяется на вхождение * @param values список в котором проверяется наличие объекта * @return {true} - если объект <code>value</code> пуст или его код равен <code>EMPTY</code> или * если этот объект есть в списке */ private boolean checkValue(TypeValue value, List<TypeValue> values) { return values == null || values.isEmpty() || (values.size() == 1 && ApplicationProperties.EMPTY.equals((values.get(0)).getCode())) || values.contains(value); }