Object[] 强制转换为String[]

本文探讨了如何在Java中使用动态参数和ArrayUtils实现将List<实体类>转换为Map,重点在于处理不同实体类字段类型并优化传参过程。作者介绍了两种方法,一种是使用Arrays.copyOf转换Object[],另一种是利用Stream进行类型转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近,有个需求需要将List<实体类> 转换成map的,map的key 是由实体类的几个字段拼接而成。这个操作用到的地方很多,于是就想写个方法,专门用来拼接key。但是参数的个数不定,因为每个实体类需要拼接的字段不一定。于是就把入参改成了动态参数。结果如下。

/**
     * 按照主键拼接map的key值
     *
     * @param arg
     * @return
     */
    private String getKey(String... arg) {
        return String.join("-", arg);
    }

这样子,经过测试, 结果当然符合要求。其中String... org代表的是String[] org

但是也可以发现,入参的类型必须保持一致,必须都为String,而需要的拼接的字段不一定都为String,所以传参的时候,还要经过类型转换,很不好看。

那么,如果把入参改为Object... org,将类型转换放在方法体内,而不是入参这,是不是就可以了

但是呢,后来发现,String.join("-",org)方法,在做拼接的时候,需要org必须为String[]

这里就涉及到了将Object[] 转成String[]了,当然使用for循环,很简单,但是Arrays给了一个现成的方法:Arrays.copyOf

该方法主要用于数组的复制,返回值是一个新数组。

形式如下:

Arrays.copyOf(arg, arg.length, String[].class);

修改一下就成了下面这个方法了。那么使用getKey的时候,入参就不需要再转成String了。

/**
     * 按照主键拼接map的key值
     *
     * @param arg
     * @return
     */
    private String getKey(Object... arg) {
        String[] strings = Arrays.copyOf(arg, arg.length, String[].class);
        return String.join("-", strings);
    }

这个方法第一次测试的时候确实是可以用,后来再用的时候,发现有问题。没来及的细究,换了第二种方法

方法如下:

private String getKey(Object... arg) {
        String[] strings = Arrays.stream(arg).map(Object::toString).toArray(String[]::new);
        return String.join("-", strings);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JYWWABF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值