java - 如何通过匹配内部数组中的值来对数组列表中的数组进行分组?
问题描述
我有一个包含几个 String[] 的 ArrayList。我想遍历 ArrayList 并对包含匹配值的内部 String[] 进行分组。在这种情况下,我专门查看 String[] 中的第二个值(例如“CompanyA”)。
我很难理解什么是最好的逻辑模式以及如何实现它。任何帮助是极大的赞赏。
List<String[]> attArrayList = new ArrayList<String[]>();
String[] entry1 = { "EventOne", "CompanyA", "Matthew" };
String[] entry2= { "EventOne", "CompanyA", "Mary" };
String[] entry3 = { "EventOne", "CompanyB", "Bates" };
String[] entry4 = { "EventOne", "CompanyC", "Carson" };
attArrayList.add(entry1);
attArrayList.add(entry2);
attArrayList.add(entry3);
attArrayList.add(entry4);
for (int i = 0; i < attArrayList.size(); i++) {
// ...
}
我想要的结果是这样的:
[[EventOne, CompanyA, Matthew], [EventOne, CompanyA, Mary]], [EventOne, CompanyB, Bates], [EventOne, CompanyC, Carson]
解决方案
Map<String, ArrayList<String[]>> map = new TreeMap<>();
for (String[] strs : attArrayList) {
if (!map.containsKey(strs[1])) {
ArrayList<String[]> list = new ArrayList<>();
list.add(strs);
map.put(strs[1], list);
} else {
map.get(strs[1]).add(strs);
map.put(strs[1], map.get(strs[1]));
}
}
for (String[] strs : map.get("CompanyA")) {
System.out.println(Arrays.toString(strs));
}
你可以试试这个。我认为它比使用流更容易理解(虽然流的代码更少)。
推荐阅读
- three.js - 如何在搅拌器的浏览器三个 js 上显示对象?
- javascript - 组件内的Vue.js组件,操作父数据
- r - R - 将重复的行值重塑为列
- django - Django API:从请求中获取经过身份验证的用户
- django - Django:将 kwargs 参数从 get_context_data() 添加到 ModelForm
- r - 将 Rcpp 函数放入 R 包后的性能故障
- php - Wordpress,html表单仅在缺少字段时运行php,如果所有字段均已填写则给出404?
- ag-grid - Accessing state with Ag-grid
- scheme - 使用 Scheme 计算后缀表达式的程序
- r - 将不同数据框中的相同列名相乘