guava: преобразовать список в карту с индексом в качестве ключа

В моем приложении у меня есть список имен. Я хочу преобразовать это в карту на основе значения индекса. Например

List<String> names = new ArrayList<String>();
names.add("Pratik");
names.add("Pratik");
names.add("Ram");
names.add("Varun");

Можете ли вы помочь мне с каким-либо методом API-интерфейса guava/java, который может помочь мне получить карту, где ключом является индекс, а значением является имя, даже если есть повторяющиеся значения? ТАК если есть две строки "Pratik" в именах. Карта должна быть такой

0 -> "Пратик", 1->"Пратик",2->"Баран",3->"Варун"

1 ответ

Решение

Я думаю, что вам не нужна гуава здесь:

Map<Integer, String> map = new HashMap<Integer, String>();
int i = 0;
for (String name : names) {
    map.put(i++, name);
}

System.out.println(map);

печатает:

{0=Pratik, 1=Pratik, 2=Ram, 3=Varun}

Если вам абсолютно нужен способ сделать это с помощью Guava, вы можете сделать это (но я бы порекомендовал способ JDK, чтобы избежать ненужной сложности):

Maps.asMap(
     ContiguousSet.create(Range.closedOpen(0, names.size()), DiscreteDomain.integers()),
          new Function<Integer, String>() {
              @Override
              public String apply(Integer input) {
                  return names.get(input);
              }
          });

Кстати, я не понимаю, зачем тебе это делать.

Другие вопросы по тегам