当前位置: 首页 > 知识库问答 >
问题:

如何转换其他如果在java8

臧威
2023-03-14

如何更改下面的代码以删除if-else并使用Java8

List<String> list1;
List<String> list2;
List<String> list3;
String str;
if(list1.contains(str)){
    event.getMessage().setInvocationProperty("ABC","ABC1");
}
else if(list2.contains(str)){
    event.getMessage().setInvocationProperty("ABC2","ABC3");
}
else if(list3.contains(str)){
    event.getMessage().setInvocationProperty("ABC4","ABC5");
}

共有2个答案

戚育
2023-03-14

可以在没有if-ther的情况下执行此操作,但是在这种情况下,if-ther仍然比使用流更好。

java prettyprint-override">List<String> list1;
List<String> list2;
List<String> list3;
String str;
Map<List<String>, List<Param>> paramMap = new HashMap<>();
paramMap.put(list1,List.of(ABC,ABC1));
paramMap.put(list2,List.of(ABC2,ABC3));
paramMap.put(list3,List.of(ABC4,ABC5));

List.of(list1,list2,list3)
    .stream()
    .filter(list -> list.contains(str))
    .findFirst()
    .ifPresent(list -> event.getMessage().setInvocationProperty(paramMap.get(list).get(0),paramMap.get(list).get(1)));

另一种不使用列表作为键的解决方案是paramMap

Map<Integer, List<Param>> paramMap = new HashMap<>();
paramMap.put(1,List.of(ABC,ABC1));
paramMap.put(2,List.of(ABC2,ABC3));
paramMap.put(3,List.of(ABC4,ABC5));
List<List<String>> lists = List.of(list1,list2,list3);
List<String> mList = lists.stream()
                          .filter(list -> list.contains(str))
                          .findFirst()
                          .ifPresent(list -> {
    Integer index = Integer.valueOf(lists.indexOf(list));     
    event.getMessage()
         .setInvocationProperty(paramMap.get(index).get(0),paramMap.get(index).get(1))
    });

谢灵均
2023-03-14

下面是如何通过创建一个我称之为HoldingObject的对象来实现这一点,但你可以用更接近你业务的东西来命名它。

我使用的是Lombok的@Value注释和java-9的列表#工厂方法

@Value
public static class HoldingObject {
    List<String> list;
    String invocationProperty1;
    String invocationProperty2;

    public void setInvocationPropertyFor(Event event) {
        event.getMessage().setInvocationProperty(invocationProperty1, invocationProperty2);
    }
}

注意执行事件。如果通过多个线程访问事件,则getMessage()可能不是线程安全的

HoldingObject firstObject = new HoldingObject(list1, ABC, ABC1);
HoldingObject secondObject = new HoldingObject(list1, ABC2, ABC3);
HoldingObject thirdObject = new HoldingObject(list1, ABC4, ABC5);

List.of(firstObject, secondObject, thirdObject)
    .stream()
    .filter(object -> object.getList().contains(str))
    .findFirst()
    .ifPresent(h -> h.setInvocationPropertyFor(event));
 类似资料:
  • 假设我有一个表customer(int id,类型varchar,首选项jsonb)。类型可以是、等。根据列类型值,首选项JSON结构将有所不同。 在从数据库加载客户记录时,如果type=regular我希望将其转换为对象类型,如果type=premium我希望将其转换为对象类型。 我已经阅读了几篇关于使用JOOQ JSON转换器/绑定的教程。但是它们是一对一映射,不是基于条件的(取决于另一个列值

  • 问题内容: 假设我有一个表 customer(int id,类型varchar,首选项jsonb) 。的 类型 可以是,基于该列类型值偏好JSON结构将是不同的等等。 从数据库加载客户记录时,如果 type = REGULAR, 我想将其转换为对象类型,如果 type = PREMIUM, 我想将其转换为对象类型。 我已经看过几本有关使用JOOQ JSON转换器/绑定的教程。但是它们是一对一的映射

  • 我正在尝试用JavaScript将本地日期/时间转换为其他时区。 日期以UTC的形式存储在数据库中。 例如 输出将在我的本地时区 2014年8月15日星期五18:09:10 GMT 0700(ICT) 但是我如何使用JavaScript将其转换为其他时区(即莫斯科)。

  • 我是编程新手,知道的不多。我不知道如何按降序转换。 我的代码中显示的输出是: 但我想要的结果是: 这是我的密码

  • 我做了下面的代码,但我知道它是正确的或不是,请协助我做正确的方式时区转换。 我把UTC日期作为json字符串,转换成用户的时区格式,并显示Android端

  • 我有以下elasticsearch索引结构: 其思想是为每个用户id-message\u id插入带有操作“open”的记录,该用户id-message\u id缺少带有操作“open”的记录。为此,我需要获取所有user\u id-message\u id关联,前提是它们没有动作:“open”。 是否可以创建一个查询,返回不同的user_id-message_id记录不包括user_id-mes