Путь к большому проекту - использовать диспетчер пакетов. Есть несколько хороших вариантов. Возможно, в окнах и визуальной студии вы можете использовать неуправляемые vcpkg или NuGet.
Если вы не можете использовать диспетчер пакетов по какой-то причине, следующая вещь должна состоять в том, чтобы зафиксировать все зависимости от репозитория GIT. Если вы ориентируетесь только на платформы Windows, такие как окна 8 или 10, и хотите поддерживать только VS2017, то компиляция зависимостей не является проблемой. Недостатком является то, что репо станет огромным.
Для крошечного школьного проекта последний вариант жизнеспособен.
Вы можете сделать это так,
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();
Вы можете map
и collect
во время потоковой передачи
List<Product> productList = proMap.keySet().stream()
.map(productName -> new Product(productName,
proMap.get(productName).stream().mapToDouble(Product::getCostIn).sum(),
proMap.get(productName).stream().mapToDouble(Product::getCostOut).sum()))
.collect(Collectors.toList());
, с другой стороны, если бы вы искали costIn / costOut по названию продукта, вы могли бы непосредственно сохранить их сумму против конкретное название продукта в то время как groupingBy
, например
Map<String, Double> costIn = tmpList.stream()
.collect(Collectors.groupingBy(Product::getName,
Collectors.summingDouble(Product::getCostIn)));
<час>