基于ArrayList按年份对数值进行分组的实现需求及示例
按年份分组数值的实现方案
嘿,针对你提出的按年份对数值分组的需求,我给你整理了一个实用的Java实现方案,用Map来动态分组比手动创建多个ArrayList要灵活得多,一起来看看吧!
核心思路
我们可以用Map<String, List<Integer>>来存储分组结果:
- 键(Key):年份字符串(比如"2015")
- 值(Value):对应年份下所有数值的
ArrayList<Integer>
这样不管后续新增多少个年份,都能自动归类,不用手动创建新的列表。
完整代码示例
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class YearGroupingExample { public static void main(String[] args) { // 创建用于分组的Map Map<String, List<Integer>> yearValueMap = new HashMap<>(); // 添加你给出的示例数据 addToGroup(yearValueMap, "2017", 45); addToGroup(yearValueMap, "2015", 654); addToGroup(yearValueMap, "2015", 19); addToGroup(yearValueMap, "2016", 88); addToGroup(yearValueMap, "2016", 25); addToGroup(yearValueMap, "2015", 45); // 获取各年份的分组结果(对应你预期的array1、array2、array3) List<Integer> array1 = yearValueMap.get("2015"); // 对应654,19,45 List<Integer> array2 = yearValueMap.get("2016"); // 对应88,25 List<Integer> array3 = yearValueMap.get("2017"); // 对应45 // 打印结果验证 System.out.println("2015的数值列表:" + array1); System.out.println("2016的数值列表:" + array2); System.out.println("2017的数值列表:" + array3); } // 封装添加数据到分组的工具方法 private static void addToGroup(Map<String, List<Integer>> map, String year, int value) { // 如果当前年份还没有对应的列表,就新建一个ArrayList map.computeIfAbsent(year, k -> new ArrayList<>()); // 将数值添加到对应年份的列表中 map.get(year).add(value); } }
代码解释
computeIfAbsent方法:检查Map中是否存在指定年份的键,如果不存在则创建一个新的ArrayList并放入Map,避免了手动判断空值的麻烦。- 工具方法
addToGroup:把添加数据的逻辑封装起来,让代码更简洁易读。 - 最终可以通过年份字符串直接从Map中取出对应的数值列表,完全符合你预期的输出效果。
运行结果
2015的数值列表:[654, 19, 45] 2016的数值列表:[88, 25] 2017的数值列表:[45]
内容的提问来源于stack exchange,提问作者Sudhakar kr
相关产品推荐
相关产品推荐

