首页 > 解决方案 > 我应该重构它以使用地图吗?

问题描述

我有一个产品列表,它们可以有不同的形式。我想将多个表单分组在同一个组下,例如 form1、form2 和 form3 现在被视为 group1。配置输入以指示表单应属于组的方式如下:

["form1,group1", "form2,group1", "form3,group1"]

对他们来说,将字符串分开并替换我想出的以下代码:

            if (!formAliasList.isEmpty() && !form.isEmpty()) {
                for(String alias: formAliasList) {
                    String[] splitted = alias.split(",",2);
                    if(splitted[0].trim().toLowerCase().contains(form.toLowerCase()))
                        form = splitted[1];
                }
            }

这工作得很好。但我觉得这也许可以简化成一张地图,如果是这样,我应该这样做吗?

标签: javaloops

解决方案


你可以用流来做到这一点:

    String[] array = {"form1,group1", "form2,group1", "form4,group2", "form3,group1"};
    Map<String, List<String>> map = Stream.of(array)
            .filter(item -> item.contains(","))
            .map(item -> item.split(","))
            .collect(Collectors.groupingBy(
                    item -> item[1],
                    Collectors.mapping(item -> item[0], Collectors.toList()))
            );
    System.out.println(map);

输出将是:{group2=[form4], group1=[form1, form2, form3]}


推荐阅读