如何从Map<String,String>的键中提取唯一特定子串?
可以提取,具体实现方式如下
当然可以提取出目标列表,核心思路是处理Map的键(key),提取每个键的前缀部分后去重即可,以下是Java语言的两种实现方式:
方式一:使用Stream API(简洁高效)
import java.util.*; import java.util.stream.Collectors; public class ExtractPrefix { public static void main(String[] args) { Map<String, String> busMap = new HashMap<>(); busMap.put("BusDetails0.BusDetail.DriverID", "1"); busMap.put("BusDetails0.BusDetail.DriverSubID", "2"); busMap.put("BusDetails1.BusDetail.DriverID", "1"); busMap.put("BusDetails1.BusDetail.DriverSubID", "2"); List<String> result = busMap.keySet().stream() // 按`.`分割字符串,取第一个元素 .map(key -> key.split("\\.")[0]) // 去重 .distinct() // 收集为列表 .collect(Collectors.toList()); System.out.println(result); // 输出 [BusDetails0, BusDetails1] } }
方式二:普通循环实现(兼容性好)
import java.util.*; public class ExtractPrefix { public static void main(String[] args) { Map<String, String> busMap = new HashMap<>(); busMap.put("BusDetails0.BusDetail.DriverID", "1"); busMap.put("BusDetails0.BusDetail.DriverSubID", "2"); busMap.put("BusDetails1.BusDetail.DriverID", "1"); busMap.put("BusDetails1.BusDetail.DriverSubID", "2"); Set<String> prefixSet = new HashSet<>(); for (String key : busMap.keySet()) { // 分割字符串,取前缀 String prefix = key.split("\\.")[0]; prefixSet.add(prefix); } // 转成列表 List<String> result = new ArrayList<>(prefixSet); System.out.println(result); // 输出 [BusDetails0, BusDetails1] } }
注意事项
- 因为
.是正则表达式的特殊字符,所以分割时要用\\.转义 - 使用
HashSet或者Stream的distinct()可以自动去重,避免重复添加相同的前缀
内容的提问来源于stack exchange,提问作者piya
相关产品推荐
相关产品推荐

