您可以使用 java 流来获得带有值的漂亮地图。例如:
List<String> res= Arrays.asList("tester1","tester2","solverC1","solverC2","solverS2","solverS1","tester1","tester4","system");
Map<String,Long> result=res.stream().collect( Collectors.groupingBy(s-> s.replaceAll("\\d","").toString(), Collectors.counting()));
将保留以下值:system="1"、tester="4"、solverS="2"、solverC="2"
我使用了 groupBy 函数,它只从字符串中删除数字,但你可以在这里定义任何你想要的规则:
Collectors.groupingBy(s-> s.replaceAll("\\d","").toString()
取决于您是否希望solverS不同于solverC
工作示例:
public class MainClass {
public static void main(String[] args) {
System.out.println(new Date()+": Let's start our StackOverflow helper project!");
List<String> res= Arrays.asList("tester1","tester2","solverC1","solverC2","solverS2","solverS1","tester1","tester4","system");
Map<String,Long> reuslts=res.stream().collect( Collectors.groupingBy(s-> s.replaceAll("\\d","").toString(), Collectors.counting()));
StringBuilder sb = new StringBuilder();
Iterator<Entry<String, Long>> iter = reuslts.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, Long> entry = iter.next();
sb.append(entry.getKey());
sb.append('=').append('"');
sb.append(entry.getValue());
sb.append('"');
if (iter.hasNext()) {
sb.append(',').append(' ');
}
}
System.out.println(sb.toString());
}
}
// It should print system="1", tester="4", solverS="2", solverC="2"