有一个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]}
```
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);
}
}
如有帮助,欢迎点赞+采纳哈!