RxJava превращает карту в список - PullRequest
0 голосов
/ 05 октября 2018

Вот желаемое поведение:

[A: 4, B: 2, C: 3, D: 3] -> [A,A,A,A,B,B,C,C,C,D,D,D]

Я написал некоторый код для решения этой проблемы. Вот код:

Map<String, Integer> terms = new HashMap<>();
Stream.of(terms.entrySet())
    .flatMap(entry -> {
        List<String> items = new ArrayList<>();
        for (int i = 0; i < entry.getValue(); i++) {
            items.add(entry.getKey());
        }
        return Stream.of(items);
    })
    .forEach(System.out::println);

Есть ли лучший способ сделать это?Я относительно новичок в Rx, поэтому я хочу знать, есть ли лучшая практика или что-то в этом роде.

1 Ответ

0 голосов
/ 06 октября 2018

Как насчет этого:

terms.keySet().stream()
    .map(s -> IntStream.range(0, map.get(s))
            .mapToObj(i -> s).collect(Collectors.toList()))
    .flatMap(List::stream)
    .collect(Collectors.toList());
...