我有一个电话号码列表,我曾经按国家(德国号码)/国际(世界其他地区)分组。示例列表如下所示:
List<String> list = new ArrayList<>();
list.add("+4969123");
list.add("+4989123");
list.add("+4930123");
list.add("+4365013");
list.add("+4369923");
list.add("+4365023");
list.add("+4176123");
list.add("+4178123");
list.add("+4179123");
list.add("+447782");
list.add("+447903");
list.add("+447701");
以及按前缀“+49”分组的方法
public static Map<Boolean,List<String>> national_International_Map(List<String> list){
return list.stream().collect(Collectors.groupingBy(s -> s.startsWith("+49")));
}
然后我不能用 true 或 false 调用该方法来将数字分隔为国家/国际
List<String> nationalNums = national_International_Map(list).get(true);
List<String> internationalNums = national_International_Map(list).get(false);
但现在要求发生了变化,我必须按国家/地区对数字进行分组。目前只有四个国家。但以后可能会添加更多。为此,我考虑了以下几点,但如果我必须对更多国家进行分组,那就很复杂了。
public static Map<Boolean,List<String>> countryMap(List<String> list, String country){
switch(country){
case "de": return list.stream().collect(Collectors.groupingBy(s -> s.startsWith("+49")));
case "at": return list.stream().collect(Collectors.groupingBy(s -> s.startsWith("+43")));
case "ch": return list.stream().collect(Collectors.groupingBy(s -> s.startsWith("+41")));
case "uk": return list.stream().collect(Collectors.groupingBy(s -> s.startsWith("+44")));
default: return null;
}
}
并称之为:
List<String> ukNums = countryMap(list,"uk").get(true);
List<String> chNums = countryMap(list,"ch").get(true);
有人可以告诉我应该如何做到最好——也许不用一直延长开关块?我想要类似的东西:
List<String> ukNums = countryMap(list).get("uk");