java的list元素怎么重新组合map(开发工具-eclipse)

有一个list集合,里面的#号元素乱的,其他元素是共用的元素,怎么把其他元素按#数字组合成list添加到一个Map集合(key是#号数字,value是重新组合的list)
要的效果就是
{#1,[xx,xxx,xxxx,#1xxxx,File,#1Start,#1End]}
{#2,[xx,xxx,xxxx,#2xxxx,File,#2Start,#2End]}

        List  list=new ArrayList<>();
        list.add("xx");
        list.add("xxx");
        list.add("xxxx");
        list.add("#1xxxx");

        list.add("#2xxxx");
        list.add("File");

        list.add("#1Start");
        list.add("#2Start");
        list.add("#1End");
        list.add("#2End");


您可以使用Java的for循环和Map集合来实现这个功能。

代码示例如下:


List<String>  list=new ArrayList<>();
list.add("xx");
list.add("xxx");
list.add("xxxx");
list.add("#1xxxx");
list.add("#2xxxx");
list.add("File");
list.add("#1Start");
list.add("#2Start");
list.add("#1End");
list.add("#2End");

Map<String, List<String>> map = new HashMap<>();

for (String s : list) {
    if (s.startsWith("#")) {
        String key = s.substring(0, s.indexOf("x") + 1);
        List<String> value = map.get(key);
        if (value == null) {
            value = new ArrayList<>();
        }
        value.add(s);
        map.put(key, value);
    } else {
        List<String> value = map.get("others");
        if (value == null) {
            value = new ArrayList<>();
        }
        value.add(s);
        map.put("others", value);
    }
}

System.out.println(map);


最终打印出来的结果为:

{#1xxxx=[#1xxxx, #1Start, #1End], #2xxxx=[#2xxxx, #2Start, #2End], others=[xx, xxx, xxxx, File]}

```

  • 可以使用正则匹配来 判断集合中 #+数字的数据
  • 运行结果如下:

img

  • 代码参考如下:
public class Test {

    public static void main(String[] args) {
        List<String>  list=new ArrayList<>();
        list.add("xx");
        list.add("xxx");
        list.add("xxxx");
        list.add("#1xxxx");

        list.add("#2xxxx");
        list.add("File");

        list.add("#1Start");
        list.add("#2Start");
        list.add("#1End");
        list.add("#2End");

        Pattern p = Pattern.compile("#\\d+");

        Map<String, List<String>> map = new HashMap<>();

        List<String> publicList = new ArrayList<>();

        for (String str : list) {
            Matcher matcher = p.matcher(str);
            if (matcher.find()) {
                String group = matcher.group();
                List<String> newList = map.computeIfAbsent(group, k -> new ArrayList<>());
                newList.add(str);
            } else {
                publicList.add(str);
            }
        }

        for (List<String> newList : map.values()) {
            newList.addAll(publicList);
        }

        System.out.println(map);
    }
}

如有帮助,欢迎点赞+采纳哈!

在这里插入图片描述

本人的开源项目,欢迎star支持下!!!