{{ ... }}Java中的Double Brace初始化语法()是什么?
我第一次尝试番石榴,我发现它真的很棒.
我在Spring jdbc模板上执行几个参数化检索查询.DAO(AbstractDataAccessObject)中的方法是这样的.这里没问题.
public Map<String,Object> getResultAsMap(String sql, Map<String,Object> parameters) {
try {
return jdbcTemplate.queryForMap(sql, parameters);
} catch (EmptyResultDataAccessException e) {
//Ignore if no data found for this query
logger.error(e.getMessage(), e);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
这是问题所在:
当我用这个方法调用时
getResultAsMap(query, new HashMap<String,Object>(ImmutableMap.of("gciList",gciList)));
Run Code Online (Sandbox Code Playgroud)
它很棒.
但是当我这样做的时候
getResultAsMap(query, Maps.newHashMap(ImmutableMap.of("gciList",gciList)));
Run Code Online (Sandbox Code Playgroud)
编译器不高兴说
The method getResultAsMap(String, Map<String,Object>) in the type AbstractDataAccessObject is not applicable for the arguments (String, HashMap<String,List<String>>)
我做错了什么或者这个投诉的原因是什么?
已经好几个月了,我对 Java 越来越青睐 Python。现在我要回到java来处理项目约束。现在,我想知道是否有一种方法可以在函数本身内部以编程方式获取函数的所有参数(带值)。
像这样的东西
public void foo(String arg1,String arg2, Integer arg3){
... pars = ...getpars();
}
foo("abc","dfg",123);
Run Code Online (Sandbox Code Playgroud)
wheregetpars()应该返回一个HashMapwithname,value对。
所以从例子来看应该是
arg1,"abc"
arg2,"dfg"
arg3,123
Run Code Online (Sandbox Code Playgroud)
有这样的事吗?
我想使用Java 9中的新工厂方法创建一个不变的hashMap内联Map.ofEntries(),例如:
Map<Integer, String> map = Map.ofEntries(
Map.entry(1, "One"),
Map.entry(2, "Two"),
Map.entry(3, "Three"));
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我发现我无法以相同的方式创建不可变的hashMap!例如,以下代码将不起作用。
HashMap<Integer, String> map = HashMap.ofEntries( //not work
Map.entry(1, "One"),
Map.entry(2, "Two"),
Map.entry(3, "Three"));
Run Code Online (Sandbox Code Playgroud)
然后,当我想检查工厂方法返回的地图类型时,发现以下注意事项:
调用者不应对返回实例的身份做任何假设。
所以我的问题是,不可变映射的访问时间复杂度是否与o(1)的hashMap相同?如果不是,如何创建不可变且同时访问o(1)的映射?最好可以内联创建。
是否可以声明并初始化Hashtableor Map,这样我们就不必在两个不同的步骤中声明和初始化?
// declare first
Hashtable<String, Integer> numbers = new Hashtable<String, Integer>(3);
// then initialize
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
Run Code Online (Sandbox Code Playgroud)
例如,在 ruby 和 javascript 中,有文字来定义它们:
numbers = {
one: 1,
two: 2,
three: 3,
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
HashMap的构建器
是否有任何实用程序类允许以方便和可读的方式从多个键值对创建Map?
我认为guava应该包含一些东西,但我找不到任何必要的功能.
我想要的是这样的:
MapBuilder.newHashMap()
.with("key1", 10)
.with("key2", 20)
.with("key3", 30)
.build();
Run Code Online (Sandbox Code Playgroud)
PS我也知道双支撑方式(new HashMap<>() {{ put(..); put(..); }}),但我发现它既不可读也不方便.
我有四种不同数量参数的方法。如何重构这些方法(是否可以制作单个通用方法?)
public Map<String, Object> addToMap(String name, Object value){
Map<String, Object> map = new HashMap<String, Object>();
map.put(name, value);
return map;
}
public Map<String, Object> addToMap(String name, Object value, String name2, Object value2){
Map<String, Object> map = new HashMap<String, Object>();
map.put(name, value);
map.put(name2, value2);
return map;
}
public Map<String, Object> addToMap(String name, Object value, String name2, Object value2, String name3, Object value3){
Map<String, Object> map = new HashMap<String, Object>();
map.put(name, value);
map.put(name2, value2);
map.put(name3, value3);
return map;
}
public Map<String, Object> addToMap(String …Run Code Online (Sandbox Code Playgroud) java ×7
collections ×2
dictionary ×2
guava ×2
hashmap ×1
immutability ×1
java-9 ×1
map ×1
methods ×1
parameters ×1
spring ×1