添加 HashMap 而不是使用 switch-case?
Adding HashMap instead of using switch-case?
所以我有一个 Java class,它有许多开关案例,我现在想用 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", ?????);
我应该在那里写什么以便我的对象设置值?
您可以将 callbacks
存储为哈希图的值:
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" );
在你明显的 switch case 中,你总是用不同的值调用 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
已更新 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"));
所以我有一个 Java class,它有许多开关案例,我现在想用 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", ?????);
我应该在那里写什么以便我的对象设置值?
您可以将 callbacks
存储为哈希图的值:
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" );
在你明显的 switch case 中,你总是用不同的值调用 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
已更新 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"));