### Question:
CategoricalAttributeDao extends NamedParameterJdbcDaoSupport { public static List<CategoricalAttribute> convertPairsToAttributesList(final List<Pair<String, String>> pairs) { return pairs.stream() .collect(Collectors.groupingBy(Pair::getKey, Collector.of(ArrayList<String>::new, (list, pair) -> list.add(pair.getValue()), (left, right) -> { left.addAll(right); return left; }, Function.identity()))) .entrySet() .stream() .map(e -> new CategoricalAttribute(e.getKey(), e.getValue().stream() .map(v -> new CategoricalAttributeValue(e.getKey(), v)) .collect(Collectors.toList()))) .collect(Collectors.toList()); }  static List<CategoricalAttribute> convertPairsToAttributesList(final List<Pair<String, String>> pairs); @Transactional(propagation = Propagation.MANDATORY) boolean updateCategoricalAttributes(final List<CategoricalAttribute> dict); @Transactional(propagation = Propagation.MANDATORY) boolean insertAttributesValues(final List<CategoricalAttribute> dict); List<CategoricalAttribute> loadAll(); List<CategoricalAttribute> loadAll(final boolean loadWithLinks); CategoricalAttribute loadAllValuesForKey(final String key); @Transactional(propagation = Propagation.MANDATORY) boolean deleteAttributeValues(final String key); @Transactional(propagation = Propagation.MANDATORY) boolean deleteAttributeValues(final List<String> keys); @Transactional(propagation = Propagation.MANDATORY) boolean deleteAttributeValue(final String key, final String value); @Required void setInsertAttributeValueQuery(String insertAttributeValueQuery); @Required void setLoadAllAttributesValuesQuery(String loadAllAttributesValuesQuery); @Required void setLoadAllAttributesValuesWithoutLinksQuery(String loadAllAttributesValuesWithoutLinksQuery); @Required void setLoadAttributesValuesQuery(String loadAttributesValuesQuery); @Required void setDeleteAttributeValuesQuery(String deleteAttributeValuesQuery); @Required void setDeleteAttributeValueQuery(String deleteAttributeValueQuery); @Required void setInsertAttributeValueLinkQuery(String insertAttributeValueLinkQuery);  }### Answer:
@Test public void testPairsToCategoricalAttributesConversion() { final List<Pair<String, String>> pairs = Arrays.asList(Pair.of(ATTRIBUTE_KEY_1, ATTRIBUTE_VALUE_1), Pair.of(ATTRIBUTE_KEY_1, ATTRIBUTE_VALUE_2), Pair.of(ATTRIBUTE_KEY_2, ATTRIBUTE_VALUE_2), Pair.of(ATTRIBUTE_KEY_2, ATTRIBUTE_VALUE_3)); final List<CategoricalAttribute> attributes = CategoricalAttributeDao.convertPairsToAttributesList(pairs); Assert.assertEquals(2, attributes.size()); final Map<String, List<String>> attributesAsMap = convertToMap(attributes); assertValuesPresentedForKeyInMap(attributesAsMap, ATTRIBUTE_KEY_1, ATTRIBUTE_VALUE_1, ATTRIBUTE_VALUE_2); assertValuesPresentedForKeyInMap(attributesAsMap, ATTRIBUTE_KEY_2, ATTRIBUTE_VALUE_2, ATTRIBUTE_VALUE_3); }