Я пытаюсь добиться этого, используя только функциональные программные конструкции (потоки, коллекторы, лямбда-выражения).
Скажем, list
- это String[]
:
{"Apple", "Samsung", "LG", "Oppo", "Apple", "Huawei", "Oppo"}
Я хочу распечатать отдельный список торговых марок из этого массива и пронумеровать их, например:
1. Apple
2. Huawei
3. LG
4. Oppo
5. Samsung
Я могу распечатать уникальные элементы (отсортированные):
Stream.of(list)
.distinct()
.sorted()
.forEach(System.out::println);
Но это не показывает предыдущий счетчик.Я пытался Collectors.counting()
, но это, конечно, не сработало.
Любая помощь экспертов ФП?
Редактировать : Я понимаю некоторые другие вопросыспросил об итерации по потоку с индексами.Однако я не могу просто сделать:
IntStream.range(0, list.length)
.mapToObj(a -> (a+1) + ". " + list[a])
.collect(Collectors.toList())
.forEach(System.out::println);
, потому что исходный массив содержит повторяющиеся элементы.Также могут быть другие map
и filter
, возможно, мне потребуется выполнить в потоке, прежде чем я напечатаю результат.