Вопрос по java – Как использовать литералы коллекций в Java 7?

19

Я пробовал следующую строку:

Map<Character, Color> map={new Character('r'):Color.red,new Character('b'):Color.black};

Но Netbeans 7 отклоняет это с сообщением об ошибке'{' expected, ';' expected.

Я установил исходный / двоичный формат как «JDK 7», а платформу - «JDK 1.7», есть ли что-то еще, что мне нужно сделать?

В Java 8 вы можете использовать этот трюк для получения разумных литералов карты из лямбда-выражений:gist.github.com/galdosd/10823529 Domingo Ignacio
Этот прием зависит от используемого компилятора. Я думаю, что это работает с Eclipse, но не с Javac. Stuart Marks
Колоны выглядят смешно! :) user unknown

Ваш Ответ

3   ответа
0

который должен быть реализован с помощью одной из соответствующих конкретных реализаций (HashMap, TreeMap или LinkedHashMap). Это все еще хорошая практика; однако объявить вашу ссылочную переменную как реализацию интерфейса, а не как конкретный конкретный вариант, поскольку он обеспечивает гибкость в будущем.

Что касается фрагмента кода, я думаю, что вам все еще нужны пары ключ-значение, определенные на стороне назначения объявления. Итак, я бы изменил:

Map<Character, Color> map = new HashMap<>() {{ 

в

Map<Character, Color> map = new HashMap<Character, Color>() {{ 
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
48

ни Java 8 не поддерживают литералы коллекций, как обсуждалось в этом вопросе:Будут ли улучшения в коллекциях Project Coin в JDK8?

Вы можете использовать Googleгуайява библиотека, если вам нужны только неизменные коллекции.ImmutableList, ImmutableSet а такжеImmutableMap есть несколько перегруженных фабричных методов или даже компоновщиков, которые облегчают создание коллекций:

List<Integer> list = ImmutableList.of(1, 1, 2, 3, 5, 8, 13, 21);
Set<String> set = ImmutableSet.of("foo", "bar", "baz", "batman");
Map<Integer, String> map = ImmutableMap.of(1, "one", 2, "two", 3, "three");

EDIT

Java 9 добавилметоды фабрики коллекций похожи на те из гуавы:

List.of(a, b, c);
Set.of(d, e, f, g);
Map.of(k1, v1, k2, v2)

Map.ofEntries(
    entry(k1, v1),
    entry(k2, v2),
    entry(k3, v3),
    // ...
    entry(kn, vn)
);
Error: User Rate Limit Exceeded DaedalusUsedPerl
11

опционально в сочетании с инициализацией двойной фигурной скобки:

Map<Character, Color> map = new HashMap<Character, Color>() {{ 
  put(new Character('r'), Color.red);
  put(new Character('b'), Color.black );
}};
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/a/924536/581205Error: User Rate Limit Exceededput('r', Color.red);
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededCharacterError: User Rate Limit Exceeded

Похожие вопросы