Joe 经营一家水果店,他想要一份水果销售情况明细表,这样就可以很容易掌握所有水果的销售情况了。
输入:
第一行表示有 M 次成功交易。其后有 M 行数据,每行都表示一次交易,由水果名称、水果产地和交易水果数量组成。
输出:水果先按照产地分类,产地按照字母顺序排列;同一产地的水果按照名称排序。
输入样例
5
apple shandong 3
pineapple guangdong 1
sugarcane guangdong 1
pineapple guangdong 3
pineapple guangdong 1
输出样例
guangdong
|-----pineapple(5)
|-----sugarcane(1)
shangdong
|-----apple(3)
本问题统计水果销售情况(产品、名称、销售数量)。水果按产地分类,产地按字母顺序排序;同一产地的水果按照名称排序,名称按照字母顺序排序。可以利用 map 的有序性和映射关系解决。
1 定义一个双重 Map<String, TreeMap<String, Integer>>,其中外层 map 键是产品,值是一个 map,内存 map 键是水果名称,值是数量。
2 根据输入信息,统计销售数量,mp[place][name]+=num。
3 按顺序输出统计信息。
package map;
import java.util.TreeMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class FruitMap {
public static void main(String[] args) {
Map<String, TreeMap<String, Integer>> mp = new TreeMap<>();
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
for (int i = 0; i < m; i++) {
String name = scanner.next();
String place = scanner.next();
int num = scanner.nextInt();
TreeMap<String, Integer> innerMap = mp.get(place);
// 没这个地名
if (innerMap == null) {
innerMap = new TreeMap<>();
innerMap.put(name, num);
mp.put(place, innerMap);
} else { // 有这个地名
Integer oldNum = innerMap.get(name);
if (oldNum == null) { // 没这个水果
innerMap.put(name, num);
} else { // 有这个水果
innerMap.put(name, num + innerMap.get(name));
}
}
}
Set<Map.Entry<String, TreeMap<String, Integer>>> entries = mp.entrySet();
for (Map.Entry<String, TreeMap<String, Integer>> entry : entries) {
System.out.println(entry.getKey());
TreeMap<String, Integer> entryValue = entry.getValue();
Set<Map.Entry<String, Integer>> innerMap = entryValue.entrySet();
for (Map.Entry<String, Integer> item : innerMap) {
System.out.println(" |----"+item.getKey()+"("+item.getValue()+")");
}
}
}
}
绿色为输入,白色为输出。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/123534636
内容来源于网络,如有侵权,请联系作者删除!