Java:如何从嵌套List<List<String>>中获取指定元素?
解决嵌套List中获取特定元素的问题
嘿,这问题很常见,我来给你捋清楚怎么处理!
首先,你现在的words是嵌套列表类型(List<List<String>>),所以words.get(0)拿到的是整个第一个子列表。要从中取出Matthew,只需要在这个子列表上再调用一次get(),指定它在子列表里的索引就行——看你输出的子列表[16, Matthew, 13,954, Alexis, 8,181],Matthew在第2个位置(Java列表索引从0开始,所以是索引1),直接这么写:
// 获取第一个子列表里的Matthew System.out.println(words.get(0).get(1));
进阶优化:让数据处理更直观
如果你的数据是有固定结构的(比如每个句子都是「排名 + 名字+数值 + 名字+数值」的格式),其实可以在流处理阶段就把数据整理成更易读的结构,避免后续靠索引取值容易出错的问题:
方案1:转成Map(名字对应数值)
把每个子列表转换成键值对,后续直接通过名字获取对应数据:
List<Map<String, String>> nameDataList = topNames.stream() .map(sentence -> sentence.split("\\s+")) .map(parts -> { Map<String, String> nameMap = new HashMap<>(); // 从索引1开始,每两个元素一组:名字+对应数值 for (int i = 1; i < parts.length; i += 2) { nameMap.put(parts[i], parts[i + 1]); } return nameMap; }) .collect(Collectors.toList()); // 直接通过名字Matthew获取数值 System.out.println(nameDataList.get(0).get("Matthew"));
方案2:直接提取所有名字
如果只需要名字集合,可以在流里过滤提取:
List<String> allNames = topNames.stream() .map(sentence -> sentence.split("\\s+")) // 跳过第一个排名元素,过滤掉带逗号的数值(假设数值都带逗号) .flatMap(parts -> Arrays.stream(parts).skip(1).filter(s -> !s.contains(","))) .collect(Collectors.toList()); // 直接拿到第一个名字Matthew System.out.println(allNames.get(0));
内容的提问来源于stack exchange,提问作者Workkkkk
相关产品推荐
相关产品推荐

