Ответ 1
К сожалению, коллекционные литералы были предложением для Project Coin в Java 7 (и Java 8), но он никогда не попадал в конечный продукт, иначе он не является признаком Java.
Предложение состояло в этом
Here’s how it would look with map literals:
final Map<Integer, String> platonicSolids = {
4 : "tetrahedron",
6 : "cube",
8 : "octahedron",
12 : "dodecahedron",
20 : "icosahedron"
};
Here is the empty map literal, which has a slightly irregular syntax to make
it differ from the empty set:
Map<String, Integer> noJokeHere = { : };
НО это никогда не случалось, поэтому, к сожалению, это не сработало. Поэтому, если вы не написали свой собственный волшебный строитель или фантазию лямбда, например на этом сайте Per-Åke Minborg, вы сами по себе. Следующие из сайта должны работать, хотя (в Java 8).
//copy paste from linked site
Map<Integer, String> map = Stream.of(
new SimpleEntry<>(0, "zero"),
new SimpleEntry<>(1, "one"),
//...
new SimpleEntry<>(11, "eleven"),
new SimpleEntry<>(12, "twelve"))
.collect(Collectors.toMap((e) -> e.getKey(), (e) -> e.getValue()));
И упрощенная версия, также из сайта:
//copy paste from linked site
public static <K, V> Map.Entry<K, V> entry(K key, V value) {
return new AbstractMap.SimpleEntry<>(key, value);
}
public static <K, U> Collector<Map.Entry<K, U>, ?, Map<K, U>> entriesToMap() {
return Collectors.toMap((e) -> e.getKey(), (e) -> e.getValue());
}
Map<Integer, String> map = Stream.of(
entry(0, "zero"),
//...
entry(12, "twelve"))
.collect(entriesToMap());
Литералы коллекции не были введены из-за этих пунктов:
-
"Простая" версия этой функции (наборы, списки, только карты) не является очень удовлетворительный или популярный; "расширяемая" версия этой функции открытый, грязный и практически гарантированный способ преодоления его дизайна бюджет;
-
Библиотека на основе версии дает нам X% выгоды для 1% стоимость, где X → 1;
-
Приводятся типы значений и "что будет выглядеть эта функция" в мире со значениями типов вполне может быть совершенно иным, чем в мире без, предполагая, что было бы сомнительно попытаться выполнить эту работу до типов значений;
-
Нам лучше сосредоточиться на решая больше основополагающих проблем, лежащих в основе версии (в том числе: более эффективные varargs, константы массива в постоянный пул, неизменяемые массивы и поддержка кеширования (и восстановления под давлением) промежуточные неизменные результаты).