这里的任务是练习Map和收藏。
我们有两个类,其属性在括号中
第一类:客户机(字符串名称、字符串姓氏、整数年龄、bigdecimal现金)
下面是主目录中随机客户端的列表
List<Client> clients = List.of(
new Client("Ola", "Chrzaszcz", 34, new BigDecimal("200")),
new Client("Ala", "Kowalsky", 24, new BigDecimal("4000")),
new Client("Olaf", "Chrzaszcz", 19, new BigDecimal("3999")),
new Client("Piotr", "Nowak", 21, new BigDecimal("2099")),
new Client("Ola", "Szwed", 45, new BigDecimal("3000"))
);
第二类:产品(字符串名称、枚举类别、bigdecimal价格)
List<Product> products = List.of(
new Product("Szynka", Category.A, new BigDecimal(29)),
new Product("Ser", Category.B, new BigDecimal(22)),
new Product("Chleb", Category.C, new BigDecimal(6)),
new Product("Maslo", Category.D, new BigDecimal(4)),
new Product("Kielbasa", Category.A, new BigDecimal(25)),
new Product("Jajka", Category.A, new BigDecimal(8)),
new Product("Szynka", Category.C, new BigDecimal(25))
);
目标->预期结果:在类main中创建shopping类的示例,其中属性是带有<key:client,value:map<product,integer>的map,并用随机数据填充它//integer-购买了多少产品
问题:
如何用这样的装潢打造购物班
如何在main中用随机数据创建这个shopping类的示例?
我所做的->当前行为:
创建的独立类购物:
代码
public class Shopping {
private Map<Client, Map<Product,Integer>> quantitiesOfProductsBoughtByClient;
main中从shopping class->创建随机对象的代码正在尝试diff组合,但仍然失败
代码
Map<Client, Map<Product,Integer>> s1 = new HashMap<>();
s1.put(clients.indexOf(0), new Map(products.indexOf(1),5) );
List<Shopping> productsBoughtByClient = List.of(
new Map<Client, Map<Product,Integer>>(clients.indexOf(0), new Map<>(products.indexOf(0),5) ),
);
顺便说一句,我试图找到类似的问题,但没有找到任何,
2条答案
按热度按时间alen0pnh1#
这里有一个例子作为起点,这里有一个方法
randomProductMap
它接受一个产品列表,shuffel这个列表,取一个随机数的产品并生成一个随机数的产品图。注意:我使用lombok来保存一些代码行,如果不需要的话就删除它。编辑
上面的方法应该给你的客户谁花费最多。这里发生了什么:遍历Map
quantitiesOfProductsBoughtByClient
collect以客户为键Map,并将每个产品的价格与数量和总和相乘,最后通过使用Stream.max
.虽然上述将返回一个客户要求,你不会得到额外的信息,例如他到底花了多少钱。因此,我建议您将方法的返回值更改为
Map.Entry<Client, BigDecimal>
得到客户和总消费。为了这个,把最后一个撇开.getKey();
```...
.max(Comparator.comparing(Map.Entry::getValue))
.get();
public Map<Client, BigDecimal> totalSpendingsByClient() {
return quantitiesOfProductsBoughtByClient.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().entrySet().stream()
.map(prodMap -> prodMap.getKey().getPrice().multiply(BigDecimal.valueOf(prodMap.getValue())))
.reduce(BigDecimal.ZERO, (prod1,prod2)-> prod1.add(prod2), BigDecimal::add)
));
}
Map<Client, BigDecimal> clientsTotal = totalSpendingsByClient();
Client cliWithMaxTotal = clientsTotal.entrySet().stream().max(Comparator.comparing(Map.Entry::getValue)).get().getKey();
Client cliWithMinTotal = //the same as above just change max to min
eoigrqb62#
已解决,非常感谢帮助//s1-新建Map
map<client,map<product,integer>>customerswiththeirshopping=newhashmap<>();
//向Map添加值
customerswiththeirshopping.put(clients.get(0),map.of(products.get(0),new integer(5));
customerswiththeirshopping.put(clients.get(1),map.of(products.get(1),6));