工具方法——根据flag获取对应的值

根据flag获取对应的值

有时候我们在做数据存储的时候,会需要根据一个flag,然后转换为对应的中文存到数据库中,例如:

String flag = "1,2,4";
String str = "1小轿车;2大卡车;3大巴车;4摩托车;5坦克;6皮卡车";

flag是我们后台接收到的值,数据库中需要存的是对应的中文。使用以下方法,就可以很方便地进行转化。

public String convert(String str, String flag) {
        // 0新保;1续保;2转保;3电销;4脱保;5加保
        ArrayList<String> resultList = new ArrayList<>();
        List<String> flagList = Splitter.on(",").splitToList(flag);

        List<String> list = Splitter.on(";").splitToList(str);
        Map map = list.stream().collect(Collectors.toMap(item -> item.substring(0, 1), item -> item.substring(1)));

        flagList.forEach(element -> {
            String value = (String) map.get(element);
            resultList.add(value);
        });

        return Joiner.on(",").join(resultList);
    }

转化后的值为:

小轿车,大卡车,摩托车

为什么需要这个工具方法

如果就一个字符串需要转换,就没必要使用该方法,直接写个Map把数据存进去然后根据key取value就足矣。

但是如果经常会有类似的数据,而且每次数据都不一样,今天是车,明天是飞机,后天是船,那必然会需要很多Map,代码自然就不太优雅,就可以使用这个方法。

我这里使用 “分号” 进行分割,如果你是逗号或者空格,根据自行进行修改,最后在拼接字符处的地方也可以自定义,所以算是比较万能的flag标记转换为String的方法了。

实现思路

方法参数为你的示例字符串和一个标记值。

  1. 根据切分字符(逗号、分号、空格等)将该 示例字符串 和传入的 标记串 进行切分然后分别存入两个List;
  2. 示例字符串 转换后的List进行切分并且存入一个Map中。例如上面代码中,将 “1小轿车” 切分为了 “1” 和 “小轿车” 作为Key-Value存入Map;
  3. 然后对flag字符串转换后的flagList进行一个遍历,将每一个flag作为key去上一步的Map中查询value,然后存入一个返回结果resultList;
  4. 最后对这个resultList转化为String返回,自定义的连接处拼接字符(逗号,分号,空格)。
PS

上面代码用到了Google的guawa工具包,你也可以使用原生API去进行字符串的拼接和分割,如果要使用guawa,需要引入下列maven坐标:

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>29.0-jre</version>
</dependency>


版权声明:本文为qq_31851531原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。