所以我有一个Java类,它有许多切换案例,我现在想用HashMap替换,因为它具有更好的性能。所以早些时候我的转换案例就像:
SomeClass someMethod = new SomeClass();
if (!("".equals(varA))) {
switch (varA) {
case "3":
someMethod.setValue("abcd");
break;
case "91":
someMethod.setValue("defgh");
break;
}
现在我想用HashMap替换它。我正在努力在put中添加对象。
HashMap<String, SomeClass> hashMap= new HashMap();
hashMap.put("3", ?????);
我应该在那里写什么,以便我的对象设置值?
答案 0 :(得分:2)
您可以将callbacks
存储为hashmap的值:
public interface MyCallback {
public void doSmth( String val );
}
...
HashMap<String, MyCallback> hashMap = new HashMap<>();
hashMap.put( "42", new MyCallback(){
@Override doSmth( String val ){ System.out.println( val ); }
} );
hashMap.get( "42" ).doSmth( "ultimate question" );
答案 1 :(得分:1)
在明显的切换情况下,您始终使用不同的值调用someMethod.setValue("...")
,因此此代码可以执行相同的操作:
private static final Map<String, String> values = new HashMap<String, String>();
// in ctor: Fill values on first class instanciation only
if (values.size() == 0) {
values.put("3", "abcd");
values.put("91", "defgh");
}
// later
if (values.containsKey(varA))
someMethod.setValue(values.get(varA));
else
// Handle unknown switch case
答案 2 :(得分:0)
针对java 8进行了更新:
Map<String, Consumer<String>> map = new HashMap<>();
map.put("42", s -> System.out.println(s));
map.get( "42" ).accept( "ultimate question" );
//or
Optional.ofNullable(map.get("42")).map(fn -> fn.accept("ultimate answer"));