use*_*184 121 java iphone android hashmap nsdictionary
我需要初始化一个常量HashMap,并希望在一行语句中执行它.像这样避免某事:
hashMap.put("One", new Integer(1)); // adding value into HashMap
hashMap.put("Two", new Integer(2));
hashMap.put("Three", new Integer(3));
Run Code Online (Sandbox Code Playgroud)
在目标C中类似于此:
[NSDictionary dictionaryWithObjectsAndKeys:
@"w",[NSNumber numberWithInt:1],
@"K",[NSNumber numberWithInt:2],
@"e",[NSNumber numberWithInt:4],
@"z",[NSNumber numberWithInt:5],
@"l",[NSNumber numberWithInt:6],
nil]
Run Code Online (Sandbox Code Playgroud)
我没有找到任何一个例子来说明如何做这个看了这么多.
Eng*_*uad 233
你可以这样做:
Map<String, Integer> hashMap = new HashMap<String, Integer>()
{{
put("One", 1);
put("Two", 2);
put("Three", 3);
}};
Run Code Online (Sandbox Code Playgroud)
小智 59
您可以使用Google Guava的ImmutableMap.只要您不关心稍后修改Map(在使用此方法构造它后无法在地图上调用.put()),这就可以正常工作:
import com.google.common.collect.ImmutableMap;
// For up to five entries, use .of()
Map<String, Integer> littleMap = ImmutableMap.of(
"One", Integer.valueOf(1),
"Two", Integer.valueOf(2),
"Three", Integer.valueOf(3)
);
// For more than five entries, use .builder()
Map<String, Integer> bigMap = ImmutableMap.<String, Integer>builder()
.put("One", Integer.valueOf(1))
.put("Two", Integer.valueOf(2))
.put("Three", Integer.valueOf(3))
.put("Four", Integer.valueOf(4))
.put("Five", Integer.valueOf(5))
.put("Six", Integer.valueOf(6))
.build();
Run Code Online (Sandbox Code Playgroud)
另见:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableMap.html
一个有点相关的问题:地图中HashMap的ImmutableMap.of()变通方法?
Tim*_*ann 41
从Java 9开始,可以使用Map.of(...)
,如下所示:
Map<String, Integer> immutableMap = Map.of("One", 1,
"Two", 2,
"Three", 3);
Run Code Online (Sandbox Code Playgroud)
这个地图是不可变的.如果您希望地图是可变的,则必须添加:
Map<String, Integer> hashMap = new HashMap<>(immutableMap);
Run Code Online (Sandbox Code Playgroud)
如果您不能使用Java 9,那么您将自己编写类似的帮助方法或使用第三方库(如Guava)为您添加该功能.
Java没有地图文字,所以没有什么好方法可以完全按照你的要求去做.
如果您需要这种类型的语法,请考虑一些与Java兼容的Groovy,它允许您:
def map = [name:"Gromit", likes:"cheese", id:1234]
Run Code Online (Sandbox Code Playgroud)
这是一个简单的课程,可以完成你想要的
import java.util.HashMap;
public class QuickHash extends HashMap<String,String> {
public QuickHash(String...KeyValuePairs) {
super(KeyValuePairs.length/2);
for(int i=0;i<KeyValuePairs.length;i+=2)
put(KeyValuePairs[i], KeyValuePairs[i+1]);
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用它
Map<String, String> Foo=QuickHash(
"a", "1",
"b", "2"
);
Run Code Online (Sandbox Code Playgroud)
这产生了 {a:1, b:2}
地图还在Java 9中添加了工厂方法.对于最多10个条目,地图具有重载构造函数,这些构造函数包含成对的键和值.例如,我们可以建立一个不同城市及其人口的地图(根据谷歌在2016年10月)如下:
Map<String, Integer> cities = Map.of("Brussels", 1_139000, "Cardiff", 341_000);
Run Code Online (Sandbox Code Playgroud)
Map的var-args情况有点困难,你需要同时拥有键和值,但在Java中,方法不能有两个var-args参数.因此,通过采用Map.Entry<K, V>
对象的var-args方法并添加entry()
构造它们的静态方法来处理一般情况.例如:
Map<String, Integer> cities = Map.ofEntries(
entry("Brussels", 1139000),
entry("Cardiff", 341000)
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
116858 次 |
最近记录: |