이 같은 다른 방법으로 Java 이스마프 초기화중 있나요?:
Map<String,String> test =
new HashMap<String, String>{"test":"test","test":"test"};
어떤 약간만이라도 올바른 구문에? 이에 대해 나는 아무것도 없습니다. 과연 그게 가능할까. 가장 짧은 / 가장 빠른 방법, 일부 " final/static" 동일팔레트에 찾고 있습니다. 지도를 만들 때 변경되지 않는 값을 미리 알고 있으며 맵.
예, 이제 이 가능하다. 자바 가상 머신 (jvm) 에 추가된 9 단순화할 수 있는 방법을 몇 가지 팩터리의 지도 작성.
// this works for up to 10 elements:
Map<String, String> test1 = Map.of(
"a", "b",
"c", "d"
);
// this works for any number of elements:
Map<String, String> test2 = Map.ofEntries(
entry("a", "b"),
entry("c", "d")
);
위의 예에서, 그냥 'test' 와 '' 을 모두 같은 다양한 방법을 통해 표현하고 있는 매핑해야 test2 가 있습니다. '방법' 이 맵에서 최대 10 개의 요소를 마피로프 정의되어 있는 반면, '방법' 등 제한값 마피오펜트리스 없을 것이다.
단, 이 경우 결과 매핑해야 불변 매핑해야 됩니다. 스케쳐내 매핑됩니까 변경 가능, 다시 '이 될 수 있습니다. (예: = new HashMap< > 무터블마프 복제본에 사용하여, (마피로프 (,, " a" b" ";)),'
(참조 [젶 269] (http://openjdk.java.net/jeps/269) 및 [Javadoc] (https://docs.oracle.com/javase/9/docs/api/java/util/Map.html))
모든 요소를 추가 아니요인 할 것이라고 합니다. 익명의 초기화 구문 만들 수 있는 하위 클래스를 사용할 수 있습니다 조금 짧다.
Map<String, String> myMap = new HashMap<>() {{
put("a", "b");
put("c", "d");
}};
그러나 경우에 따라 익명 하위 권능은하나님께 원치 않는 비헤이비어를 소개하십시오. 여기에는 예를 들면 다음과 같습니다.
또 지도를 만들 수 있는 함수를 사용하여 초기화하려면 활성화하십시오 불쾌한 부작용을 피할 수 있지만, 초기화.
Map<String, String> myMap = createMap();
private static Map<String, String> createMap() {
Map<String,String> myMap = new HashMap<String,String>();
myMap.put("a", "b");
myMap.put("c", "d");
return myMap;
}
이것은 하나의 방법입니다.
HashMap<String, String> h = new HashMap<String, String>() {{
put("a","b");
}};
그러나 그 위의 코드는 이해하겠니 및 smartupdate 않도록 주의해야 합니다 (e-lab 은 새로운 클래스를 통해 상속됩니다 이스마프). 따라서 여기서 더 읽어야 합니다. 도브레브라체니시알이제이션 http://www.c2.com/cgi/wiki? 구아바, 또는 단순히 사용합니다.
Map<String, Integer> left = ImmutableMap.of("a", 1, "b", 2, "c", 3);
3rd party 허용하시겠습니까 경우 libs & # 39 사용할 수 있습니다. 구아바 의 이무터블마프 충족합니다 같은 ipv6-literal. 간략하게:
Map<String, String> test = ImmutableMap.of("k1", "v1", "k2", "v2");
이 방법은 최대 [5 키 / 값 쌍] [3], [구성기는] [4] 는 그렇지 않으면 사용할 수 있습니다.
Map<String, String> test = ImmutableMap.<String, String>builder()
.put("k1", "v1")
.put("k2", "v2")
...
.build();
< br/>;
[3]: https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/ImmutableMap.html # k v v v v k k k k v - [4]: https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/ImmutableMap.html # 구성기는 -
이 방법으로 직접판매용 없다 - Java 주님으로부터그에게 매핑해야 리터럴 (이들은 아직 - 내가 생각 대한 제안 jave 8).
어떤 사람들은 다음과 같습니다.
Map<String,String> test = new HashMap<String, String>(){{
put("test","test"); put("test","test");}};
이렇게 하면, 이 값을 갖는 이스마프 익명의 의 하위 클래스 인스턴스 초기화 됩니다. (By the way, 지도 can& # 39, t 컨테인먼트하는 동일한 가치를 다시 한 번 두 번째 동일팔레트에 덮어써지며 첫 번째. # 39, ll 서로 다른 값을 사용할 i& 향후 참조용이므로.)
일반적인 방법으로 약간만이라도 이 (for a 로컬 변수):
Map<String,String> test = new HashMap<String, String>();
test.put("test","test");
test.put("test1","test2");
이 경우, 또는 'test' 매핑해야 가변적입니다 인스턴스입니다 초기화하지 받을시간은 구성자를 동일팔레트에 인스턴스입니다 초기화.
Map<String,String> test = new HashMap<String, String>();
{
test.put("test","test");
test.put("test1","test2");
}
'Test' 의 경우, 정적 클래스 변수 초기화 동일팔레트에 맵 () 은 초기화.
static Map<String,String> test = new HashMap<String, String>();
static {
test.put("test","test");
test.put("test1","test2");
}
절대 변하지 초기화하지 랩 후 원하는 경우에는 매핑됩니까 맵에 콜레스티언스트런모드리피아브레마프 (.) '에서' 합니다. 정적 초기화 너무 이 작업을 수행할 수 있습니다.
static Map<String,String> test;
{
Map<String,String> temp = new HashMap<String, String>();
temp.put("test","test");
temp.put("test1","test2");
test = Collections.unmodifiableMap(temp);
}
(I& # 39 할 수 있다면, 이제 마지막 'test' m not 합니다. 시도해 보고 왔어요.)
일반 자바 클래스를 사용하여 7 대체 및 바라리스: '이 메서드를 사용하여 클래스의 이스마프부이더 만듭니다. <! - 모든 언어: java->.
public static HashMap<String, String> build(String... data){
HashMap<String, String> result = new HashMap<String, String>();
if(data.length % 2 != 0)
throw new IllegalArgumentException("Odd number of arguments");
String key = null;
Integer step = -1;
for(String value : data){
step++;
switch(step % 2){
case 0:
if(value == null)
throw new IllegalArgumentException("Null key value");
key = value;
continue;
case 1:
result.put(key, value);
break;
}
}
return result;
}
사용 방법은 다음과 같습니다.
HashMap<String,String> data = HashMapBuilder.build("key1","value1","key2","value2");