Вы можете сделать это так,
Collection<Product> productsByName = tmpList.stream()
.collect(Collectors.toMap(Product::getName,
Function.identity(),
(p1, p2) -> new Product(p1.getName(),
p1.getCostIn() + p2.getCostIn(), p1.getCostOut() + p2.getCostOut())))
.values();
Ортогональные средства, независимые друг от друга.
Никакая идея, почему это было бы плохо. На самом деле я обычно использую вторичные индексы (помимо 'идентификационного' первичного ключа автоинкремента), когда существует общий запрос, который не имеет никакого отношения к основному.
Othogonal просто имеет в виду независимый т.е. не связанный с основным беспокойством.
Я мог бы отвечать на свой собственный вопрос здесь, но не стесняться вскакивать с Вашими собственными мыслями.
Ответ Javier (+1) обманул меня, чтобы думать, что, возможно, точка здесь - то, что наличие больше чем одного уникального индекса могло быть плохой вещью, если объекты в том индексе абсолютно не связаны.
Другими словами, Вы увеличиваете возможности реальных данных, являющихся невозможным сохранить из-за вторичной индексной уникальности ограничения. Это также потенциально представило бы искусственные ограничения на данные, которые не должны обязательно быть там.
Я полагаю, что услышал термин 'ортогональный индекс' в двух отдельных случаях, но у меня нет дальнейшего знания, если это - подтвержденный термин. В обоих случаях они обращались к индексу, который не должен был использоваться оптимизатором запросов с тех пор:
в одном случае это индексировало абсолютно несоответствующий столбец, никогда не используемый в качестве столбца сортировки или критериев поиска; термин звучал "диковинным" мне, но я не возразил :)
в другом случае это были два индекса столбца, но порядок столбцов в поле был реверсом, чем необходимый тот.
У меня нет абсолютно никакой идеи, если это относится к Вашему вопросу :)