300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 用多重 map 查询水果销售情况

用多重 map 查询水果销售情况

时间:2020-02-12 00:58:15

相关推荐

用多重 map 查询水果销售情况

一问题描述

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()+")");}}}}

四测试

绿色为输入,白色为输出。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。