Java Stream группировка и подсчет вхождений - PullRequest
1 голос
/ 10 апреля 2019

У меня есть список объектов, представляющих сделки на рынке.Каждая сделка имеет время открытия и закрытия и прибыль.Я хочу сгруппировать их по месяцам, а затем посчитать количество сделок с прибылью> 0 и <0 в каждом месяце = создать карту со следующей структурой {"MM" = {"Win" = numberOfWinTrades, "Loss" = numberOfLossTrades}, "ММ" ...} </p>

Я придумал следующий код, но не могу реализовать в нем условие:

filteredOrders.stream().collect(Collectors.groupingBy(order -> order.getCreationTime().substring(5,7),
                Collectors.groupingBy(order -> order.getPlUsd() > 0, Collectors.counting())));

1 Ответ

3 голосов
/ 10 апреля 2019

Вы можете использовать встроенное отображение на основе условия order.getPlUsd() > 0 / order.getPlUsd() < 0:

Map<String, Map<String, Long>> monthPlusdGroups = 
    filteredOrders.stream()
    .collect(Collectors.groupingBy(order -> order.getCreationTime().substring(5, 7),
             Collectors.groupingBy(order -> order.getPlusd() > 0 ? "Win" : "Loss", 
                                   Collectors.counting())));

Просто обратите внимание, что эта реализация (order.getPlusd() > 0 ? "Win" : "Loss") классифицирует прибыль в размере 0 долл. США как «убыток».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...