Суть - есть два списка, элементы одного ссылаются на другой (вернее соотносятся, а не ссылаются, ссылки на объекты разные т.к. списки из базы приходят). Грубо говоря отношение Many-To-One со стороный элементов первого к элементам второго. Классы элементов например такие как ниже.
public class ElemA {
public ElemB b;
public double value;
}
public class ElemB {
public int id;
public String name;
}
В итоге хотелось бы получать Map<String, Double>
с именами из второго списка и суммой значений первого, который потом отправляется дальше по этапу.
Пока придумал так:
for (ElemB b : bList) {
double vals = aList.stream().filter((a) -> a.b.id == b.id).mapToDouble((a) -> a.value).sum();
map.put(b.name, new Double(vals));
}
Вот возник вопрос - а не туплю ли я? Можно ли сделать это проще/эффективнее/лучше? Иду по списку B т.к. во-первых он логически выше, а во-вторых в целом может вылезти null или еще какой рудимент из базы, хотя по идее чистка должна идти каскадом.
И кстати, раз уж написал - что корректнее использовать, public параметры как в примере или private + Get/Set? Сейчас юзаю второе, просто если напишу так - пост расползется. Просто пока копался в библиотеке к гугловому API заметил что народ юзает там везде public, хотя в большинстве библиотек вижу private + get/set