You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:53:15