Как можно идиоматический перечислить Stream<T>
, которая отображает каждый T
экземпляр уникального целым число с помощью Java-8 методов потока (например, для массива T[] values
, создавая Map<T,Integer>
, где Map.get(values[i]) == i
вычисляется в true
)?идиоматический перечисление потока объектов в Java 8
В настоящее время, я определяю анонимный класс, который приращение int
поля для использования с Collectors.toMap(..)
методом:
private static <T> Map<T, Integer> createIdMap(final Stream<T> values) {
return values.collect(Collectors.toMap(Function.identity(), new Function<T, Integer>() {
private int nextId = 0;
@Override
public Integer apply(final T t) {
return nextId++;
}
}));
}
Однако, есть не более лаконичный/элегантный способ сделать это с помощью Java- поток API? — бонусные баллы, если их можно безопасно распараллелить.
Все значения в потоке 'values' уникальны? – Andremoniy
В моем конкретном случае да, но было бы также интересно увидеть решение, которое может обрабатывать множественные вхождения объекта. – errantlinguist
@SME_Dev определенно нет. – Andremoniy