我有这个问题,我需要一些东西来匹配带有电话号码的area_code,最后我需要每个area_code中的phoneNumbers计数,我想我可以使用Map。你有什么想法吗?
Example
Given area_code: 351 phone_number:123456
Given area_code: 351 phone_number:1234567
Given area_code: 111 phone_number:678904
Output
351:2 (2 is the count on the numbers)
111:1 (1 is the count on the numbers)
答案 0 :(得分:4)
首先,创建一个包含两个字段的类,一个用于表示区号(String
),另一个用于表示电话号码(String
)。一旦完成,你就可以旋转所需的许多物体;用必要的数据填充它,然后将其存储到List中。
完成后,您可以使用groupingBy
收集器来计算属于每个组的电话号码(区号),如下所示:
Map<String, Long> resultSet =
myList.stream()
.collect(Collectors.groupingBy(ClassName::getAreaCode, Collectors.counting()));
或者如果您只想打印,那么您可以这样做:
myList.stream()
.collect(Collectors.groupingBy(ClassName::getAreaCode, Collectors.counting()))
.forEach((k, v) -> System.out.println(String.join(":", k, v.toString())));
答案 1 :(得分:3)
假设你有一个public class Phone {
private final String areaCode;
private final String number;
public Phone(String areaCode, String number) {
this.areaCode = areaCode;
this.number = number;
}
public String getAreaCode() { return areaCode; }
public String getNumber() { return number; }
}
课程如下:
List<Phone> phoneNumbers = Arrays.asList(
new Phone("351", "123456"),
new Phone("351", "1234567"),
new Phone("111", "678904"));
然后,一旦你有一个电话列表,比如这个:
Map<String, Integer> result = new HashMap<>();
phoneNumbers.forEach(phone -> result.merge(phone.getAreaCode(), 1, Integer::sum));
您可以这样使用任一流(例如Aominè's answer)或Map.merge
method:
result
这会迭代电话号码列表,对于每一个电话号码列表,它会在1
地图中放入一个条目,区号为关键字,1
为值。如果对于当前电话号码,地图已包含带有区号的条目,则Integer::sum
将通过'Parameter ... implicitly has an 'any' type
合并功能添加到该条目的值。
答案 2 :(得分:1)
您可以使用Map存储每个area_code的计数:
private HashMap<String, Integer> areaCodes = new HashMap<String, Integer>();
public void addAreaCode(String areaCode) {
if (areaCodes.containsKey(areaCode)) {
areaCodes.put(areaCode, areaCodes.get(areaCode) + 1);
} else {
areaCodes.put(areaCode, 1);
}
}
public void foo() {
addAreaCode("351");
addAreaCode("351");
addAreaCode("111");
for (String areaCode : areaCodes.keySet()) {
System.out.printf("%s:%d\n", areaCode, areaCodes.get(areaCode));
}
}
我使用字符串存储area_codes以防任何以0
开头。