Facebook
From Little Gibbon, 2 Months ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 20
  1. @Test
  2.         public void P17_havingEnoughMoney() {
  3.                 // when
  4.  
  5.                 Map<String, Integer> items = shopList.stream()
  6.                                 .map(Shop::getItemList)
  7.                                 .flatMap(List::stream)
  8.                                 .distinct()
  9.                                 .collect(Collectors.toMap(i -> i.getName(), i -> i.getPrice(), (a, b) -> Math.min(a, b)));
  10.  
  11.  
  12.                 final List<String> customerNameList = customerList.stream()
  13.                                 .filter(i -> sum(i.getWantToBuy(), items) <= i.getBudget())
  14.                                 .filter(i -> haveall(i.getWantToBuy(), items))
  15.                                 .map(Customer::getName)
  16.                                 .collect(Collectors.toList());
  17.  
  18.                 // then
  19.                 assertThat(customerNameList).hasSize(8);
  20.                 assertThat(customerNameList).containsOnly("Joe", "Steven", "Patrick", "Diana", "Kathy", "Alice", "Martin",
  21.                                 "Amy");
  22.         }
  23.  
  24.         private Long sum(List<ItemEntry> itemList, Map<String, Integer> priceLookup) {
  25.                 return itemList.stream()
  26.                                 .collect(Collectors.summingLong(i -> priceLookup.getOrDefault(i.getName(), 0)));
  27.         }
  28.  
  29.         private Boolean haveall(List<ItemEntry> itemList, Map<String, Integer> priceLookup) {
  30.                 return itemList.stream()
  31.                                 .allMatch(i -> priceLookup.containsKey(i.getName()));
  32.         }