题解 | #合并表记录#
合并表记录
https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201
import java.util.*; import java.util.Comparator; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); Integer integer = new Integer(s); //传进来一个key的比较器对象来构造treemap MyComparator myComparator = new MyComparator(); // 小于、等于或者大于o2分别返回负整数、0或者正整数, // 来决定二者存放的先后位置:返回负数则o1在前,正数则o2在前。 Map<Integer, Integer> map = new TreeMap<>(myComparator); // ArrayList<String> list = new ArrayList<>(); int num = 0; boolean flag = true; while (flag) { String s2 = scanner.nextLine(); num++; int indexOfSpace = s2.indexOf(" "); Integer key = Integer.valueOf(s2.substring(0, indexOfSpace)); // System.out.println("key值为" + key); Integer value = Integer.valueOf(s2.substring(indexOfSpace + 1)); // System.out.println("value值为" + value); // Integer key = new Integer(String.valueOf(s2.charAt(indexOfSpace - 1))); // Integer value = new Integer(String.valueOf(s2.charAt(indexOfSpace + 1))); //价格判断条件 当key相等时 value求和 boolean b = map.containsKey(key); if (b) { value = map.get(key) + value; map.remove(key); map.put(key, value); } else { map.put(key, value); } if (num == integer) { flag = false; } //对map中的key排序后输出 //map的遍历:把key抽取出来用set存放,然后用迭代器遍历keyset,同时用map.get(KEY)获取key所对应的value。 } Set<Integer> keySet = map.keySet(); Iterator it = keySet.iterator(); while (it.hasNext()) { //next就是key Integer next = (Integer) it.next(); System.out.println(next + " " + map.get(next)); } // list.forEach(System.out::println); } } class MyComparator implements Comparator<Integer> { //定义key的比较器,比较算法根据第一个参数o1, // 小于、等于或者大于o2分别返回负整数、0或者正整数, // 来决定二者存放的先后位置:返回负数则o1在前,正数则o2在前。 @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }