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

如何从Object[]数组内的HashMap<String, Object>提取shownUserId值

提取Object[]中HashMap的shownUserId值

方法一:基础循环遍历(兼容Java 8及更早版本)

直接遍历数组,逐个判断类型并提取目标值:

List<String> shownUserIds = new ArrayList<>();
Object[] shownUsers = user.getAlreadyShownUser();
if (shownUsers != null) {
    for (Object item : shownUsers) {
        // 先判断当前元素是否为HashMap类型
        if (item instanceof HashMap) {
            HashMap<String, Object> userMap = (HashMap<String, Object>) item;
            Object idObj = userMap.get("shownUserId");
            // 确保提取到的是String类型
            if (idObj instanceof String) {
                shownUserIds.add((String) idObj);
            }
        }
    }
}

方法二:Java 8+ Stream流简化写法

利用Stream链式调用简化遍历、过滤和转换逻辑:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

// 提取逻辑
List<String> shownUserIds = Arrays.stream(user.getAlreadyShownUser())
        .filter(item -> item instanceof HashMap) // 过滤出HashMap类型元素
        .map(item -> (HashMap<String, Object>) item) // 强转为HashMap
        .map(map -> map.get("shownUserId")) // 获取shownUserId对应的值
        .filter(id -> id instanceof String) // 确保是String类型
        .map(id -> (String) id) // 强转成String
        .collect(Collectors.toList()); // 收集为List

更优方案:重构实体类(类型安全)

当前用Object[]存储HashMap的方式缺乏类型安全,易出现转换异常。建议创建对应实体类封装数据:

import java.time.LocalDateTime;

public class ShownUser {
    private String shownUserId;
    private LocalDateTime shownAt;

    // Getter、Setter方法
    public String getShownUserId() {
        return shownUserId;
    }

    public void setShownUserId(String shownUserId) {
        this.shownUserId = shownUserId;
    }

    public LocalDateTime getShownAt() {
        return shownAt;
    }

    public void setShownAt(LocalDateTime shownAt) {
        this.shownAt = shownAt;
    }
}

修改User实体的字段:

@Schema
private ShownUser[] alreadyShownUser;
// 或使用List提升灵活性:private List<ShownUser> alreadyShownUser;

此时提取shownUserId会更简洁安全:

// 数组转List提取
List<String> shownUserIds = Arrays.stream(user.getAlreadyShownUser())
        .map(ShownUser::getShownUserId)
        .collect(Collectors.toList());

// 如果是List类型直接处理
// List<String> shownUserIds = user.getAlreadyShownUser().stream()
//         .map(ShownUser::getShownUserId)
//         .collect(Collectors.toList());

内容的提问来源于stack exchange,提问作者sejin park

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:55:56