Как сгруппировать свойства объекта и сопоставить его с другим объектом, используя потоки Java 8?

typedef void (Dog::*memfun)();
memfun doSomething = &Dog::bark;
....
(pDog->*doSomething)(); // if pDog is a pointer
// (pDog.*doSomething)(); // if pDog is a reference
15
задан MC Emperor 21 January 2019 в 09:09
поделиться

3 ответа

Вы можете получить с помощью BiConsumer, которые принимают (HashMap<SizeColorCombination, DistGroup> res, BumperCar bc) в качестве параметров

Collection<DistGroup> values = bumperCars.stream()
        .collect(HashMap::new, (HashMap<SizeColorCombination, DistGroup> res, BumperCar bc) -> {
                SizeColorCombination dg = new SizeColorCombination(bc.color, bc.size);
                DistGroup distGroup = res.get(dg);
                if(distGroup != null) {
                    distGroup.addCarCode(bc.carCode);
                }else {
                    List<String> codes = new ArrayList();
                    distGroup = new DistGroup(bc.size, bc.color, codes);
                    res.put(dg, distGroup);
                }
                },HashMap::putAll).values();
0
ответ дан SEY_91 21 January 2019 в 09:09
поделиться

Проверьте мою библиотеку AbacusUtil :

StreamEx.of(bumperCars)
         .groupBy(c -> Tuple.of(c.getSize(), c.getColor()), BumperCar::getCarCode)
         .map(e -> new DistGroup(e.getKey()._1, e.getKey()._2, e.getValue())
         .toList();
0
ответ дан 123-xyz 21 January 2019 в 09:09
поделиться

Если предположить, что DistGroup имеет hashCode/equals на основе size и color, вы можете сделать это следующим образом:

bumperCars
    .stream()
    .map(x -> {
        List<String> list = new ArrayList<>();
        list.add(x.getCarCode());
        return new SimpleEntry<>(x, list);
    })
    .map(x -> new DistGroup(x.getKey().getSize(), x.getKey().getColor(), x.getValue()))
    .collect(Collectors.toMap(
        Function.identity(),
        Function.identity(),
        (left, right) -> {
            left.getCarCodes().addAll(right.getCarCodes());
            return left;
        }))
    .values(); // Collection<DistGroup>
0
ответ дан Naman 21 January 2019 в 09:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: