如何以第二列为筛选条件从多维数组行中获取指定值
按数组第二列值分组生成逗号分隔字符串(Java实现)
问题场景
现有如下Java多维数组:
String[][] array = {{"A", "1"}, {"B", "1"}, {"C", "2"}, {"D", "2"}, {"E", "1"}};
需要根据第二列的值,将对应第一列的元素拼接成两个逗号分隔的字符串:
string one : A,B,E // 对应第二列值为1的元素 string two : C,D // 对应第二列值为2的元素
解决方案1:使用HashMap循环处理
适配所有Java版本,逻辑清晰易懂:
import java.util.HashMap; import java.util.Map; public class GroupArrayDemo { public static void main(String[] args) { String[][] array = {{"A", "1"}, {"B", "1"}, {"C", "2"}, {"D", "2"}, {"E", "1"}}; // 用HashMap存储分组关系:key是第二列的值,value是拼接中的字符串 Map<String, StringBuilder> groupMap = new HashMap<>(); for (String[] row : array) { String groupKey = row[1]; String element = row[0]; // 若分组不存在则新建StringBuilder,否则直接追加元素和逗号 groupMap.computeIfAbsent(groupKey, k -> new StringBuilder()).append(element).append(","); } // 去除末尾多余的逗号,得到最终字符串 String group1 = groupMap.get("1").toString().replaceAll(",$", ""); String group2 = groupMap.get("2").toString().replaceAll(",$", ""); // 输出结果 System.out.println("string one : " + group1 + " for 1"); System.out.println("string two : " + group2 + " for 2"); } }
解决方案2:使用Java 8+ Stream API
代码更简洁,利用流的分组和收集器直接完成拼接:
import java.util.Arrays; import java.util.Map; import java.util.stream.Collectors; public class GroupWithStreamDemo { public static void main(String[] args) { String[][] array = {{"A", "1"}, {"B", "1"}, {"C", "2"}, {"D", "2"}, {"E", "1"}}; // 流式分组并直接拼接成逗号分隔的字符串 Map<String, String> resultMap = Arrays.stream(array) .collect(Collectors.groupingBy( row -> row[1], // 按第二列值分组 Collectors.mapping(row -> row[0], Collectors.joining(",")) // 映射并拼接第一列元素 )); // 输出结果 System.out.println("string one : " + resultMap.get("1") + " for 1"); System.out.println("string two : " + resultMap.get("2") + " for 2"); } }
运行结果
两种方案运行后都会输出:
string one : A,B,E for 1 string two : C,D for 2
内容的提问来源于stack exchange,提问作者Игорь Матвеев
相关产品推荐
相关产品推荐

