我怎样才能避免在java中做很多if?
发布时间:2020-12-15 04:36:50 所属栏目:Java 来源:网络整理
导读:在c中,我会使用int / pointer的映射来实现这样的函数: std::map = {{Code::Value1,Handler::value1Handler},{Code::Value2,Handler::value2Handler},}; 为了避免做很多if if (value == Code::Value1) value1Handler();if (value == Code::Value2) value2Han
在c中,我会使用int / pointer的映射来实现这样的函数:
std::map = { {Code::Value1,Handler::value1Handler},{Code::Value2,Handler::value2Handler},}; 为了避免做很多if if (value == Code::Value1) value1Handler(); if (value == Code::Value2) value2Handler(); if (value == Code::Value3) value3Handler(); 但是我没有找到在Java中做到这一点的好方法,是否可能? 解决方法
正如我意识到的那样,您希望将密钥T与相应的操作Consumer< T>相关联. (或函数< K,V>如果返回类型很重要).
不幸的是,我们没有map map,所以简而言之,可以使用init块生成HashMap子类: Map<T,Consumer<T>> map = new HashMap<T,Consumer<T>>() {{ put(k1,v -> {/* value handler 1 */}); put(k2,v -> {/* value handler 2 */}); }}; 作为地图值,您可以使用键传递要执行的操作.例如, v -> System.out.println(v) 如果此类操作是单个操作,则可以使用方法引用替换它: System.out::println (这里我理解了valueXHandlers返回一个map值,它们不仅仅是消费者.因此,函数< K,V>是我们的方式) 通常,我会编写一个mapper,它将一个键转换为一个值并返回该值: public <K,V> V mapToValue(K key,Function<K,V> function) { return function.apply(key); } 它的用法很简单: map.put(k1,mapToValue(k1,k1 -> v1)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容