У меня есть arraylist с именем того, кто что-то платит, и еще один arraylist со стоимостью каждого платежа.Например:
- nameArray = Никола, Рауль, Лоренцо, Рауль, Рауль, Лоренцо, Никола
- priceArray = 24, 12, 22, 18, 5, 8, 1
Мне нужно подсчитать стоимость каждого человека.Таким образом, массив должен стать:
- nameArray = Никола, Рауль, Лоренцо
цена Array = 25, 35, 30
И затем, упорядочивмассив по цене, так:
nameArray = Рауль, Лоренцо, Никола
priceArray = 35, 30, 25
Я использую карту, но проблема сейчас в том, что я вижу несколько раз имя каждого человека и каждый платеж с суммой.Вот код:
public void bubble_sort(ArrayList<String> nameArray, ArrayList<BigDecimal> priceArray) {
Map<String, BigDecimal> totals = new HashMap<>();
for (int i = 0; i < nameArray.size(); ++i) {
String name = nameArray.get(i);
BigDecimal price = priceArray.get(i);
BigDecimal total = totals.get(name);
if (total != null) {
totals.put(name, total.add(price));
} else {
totals.put(name, price);
}
}
for (Map.Entry<String, BigDecimal> entry : totals.entrySet()) {
nameArray.add(entry.getKey());
priceArray.add(entry.getValue());
}
for (int i = 0; i < priceArray.size(); i++) {
for (int j = 0; j < priceArray.size() - 1; j++) {
if (priceArray.get(j).compareTo(priceArray.get(j + 1)) < 0) {
BigDecimal tempPrice = priceArray.get(j);
String tempName = nameArray.get(j);
priceArray.set(j, priceArray.get(j + 1));
nameArray.set(j, nameArray.get(j + 1));
priceArray.set(j + 1, tempPrice);
nameArray.set(j + 1, tempName);
}
}
}
Log.v("New nameArray", nameArray.toString());
Log.v("New priceArray", priceArray.toString());
}
Это вывод журнала:
New nameArray: [Nico, Nico, Raul, Nico, Raul, Lorenzo, Lorenzo, Raul]
New priceArray: [43.50, 25.50, 18.98, 18.00, 16.98, 9.50, 9.50, 2.00]
Нико заплатил 18,00 + 25,50 = 43,50, Рауль 16,98 +2 = 18,98 и Лоренцо 9.50.Имя и цена были вставлены пользователем динамически.
Мне нужно отобразить массив следующим образом:
- nameArray: Нико, Рауль, Лоренцо
- priceArray: 43,50, 16,98, 9,50