加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

我怎样才能避免在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));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读