java实现分组、求和、再求最小

            // 总体要实现:找到每个人交易额总的和最小的那个人的信息
            public void lambdaPractice() {
		Trader raoul = new Trader("Raoul", "Cambridge");
		Trader mario = new Trader("Mario", "Milan");
		Trader alan = new Trader("Alan", "Cambridge");
		Trader brian = new Trader("Brian", "Cambridge");
                // 这里是个知识点你需要将Arrays.asList方式转化成ArrayList这种方式
                // 否则在使用transactions.remove()方法时会报UnsupportedOperationException
		List<Transaction> transactions = new ArrayList<>(Arrays.asList(new Transaction(brian, 2011, 300),
				new Transaction(raoul, 2012, 1000), new Transaction(raoul, 2011, 400),
				new Transaction(mario, 2012, 710), new Transaction(mario, 2012, 700), new Transaction(alan, 2012, 950)));

		// 将同一个人的交易额进行加算生成新的集合
		List<Transaction> sumList = new ArrayList<>();
		for (int i = 0; i < transactions.size(); i++) {
			for (int j = i + 1; j < transactions.size(); j++) {
				if (transactions.get(i).getTrader().getName().equals(transactions.get(j).getTrader().getName())) {
					Trader t = new Trader();
					t.setCity(transactions.get(i).getTrader().getCity());
					t.setName(transactions.get(i).getTrader().getName());
					Transaction temp = new Transaction();
					temp.setYear(transactions.get(i).getYear());
					int sum = transactions.get(i).getValue() + transactions.get(j).getValue();
					temp.setValue(sum);
					temp.setTrader(t);
					sumList.add(temp);
				}
			}
		}
		
                // 在原始集合中删除已加算完成的人的信息
		for (int i = 0; i < transactions.size(); i++) {
			for (int j = 0; j < sumList.size(); j++) {
				if (transactions.get(i).getTrader().getName().equals(sumList.get(j).getTrader().getName())) {
					// 这里也是注意点
                                        // 删除时索引会发生变化,我们可以使索引同步
					transactions.remove(i--);
				}
			}
		}
                // 再将加算完成的人的信息加入到原始List中
		for (Transaction transaction : sumList) {
			transactions.add(transaction);
		}
		// 找到每个人交易额总和最小的那个人的信息
		Transaction transaction = transactions.stream().min((x, y) -> x.getValue() - y.getValue()).get();		
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值