Java8利用stream对List<Object>提取某个属性形成新的数组

本文通过实例展示了如何使用Java Stream API将List<User>转换为List<String>,提取User对象的name属性。同时,也探讨了将List<Map<String, Object>>转换成List<String>的过程,证实了map()方法的灵活性,可以应用于Map对象并进行业务逻辑处理。这种方法在处理集合数据转换时非常实用。
摘要由CSDN通过智能技术生成
现在我要将一个List<User>抽取User的name创建出一个List<String> nameList的集合

这个是我的实体 , 引入了lombok插件, getset这里就省略了

@Data
@Accessors(chain = true)
public class User {
    private String name;
    private Integer age;
}

测试

@Test
public void test01(){
    List<User> users = new LinkedList<>();
    users.add(new User().setName("小一").setAge(20));
    users.add(new User().setName("小二").setAge(14));
    users.add(new User().setName("小三").setAge(18));
    List<String> nameList = users.stream().map(User::getName).collect(Collectors.toList());
    System.out.println(nameList);
}

输出结果

[小一, 小二, 小三]



曾经我有疑问, 那如果我的对象不是实体而是Map呢, 我要去抽取key出来重新组成数组是否可行?

经过测试, 是可以的,

@Test
public void test02(){
    List<Map<String, Object>> maps = new LinkedList<>();
    maps.add(new HashMap(){{
        put("name", "小四");
        put("age", 12);
    }});
    maps.add(new HashMap(){{
        put("name", "小五");
        put("age", 18);
    }});
    maps.add(new HashMap(){{
        put("name", "小六");
        put("age", 22);
    }});
    List<String> nameList = maps.stream().map(item -> item.get("name").toString()).collect(Collectors.toList());
    System.out.println(nameList);
}

输出结果

[小四, 小五, 小六]



结论:

list.stream().map()方法接口的源码

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

Function类型参数只要里面return一个结果内容即可

甚至还可以在里面实现业务逻辑,判断

maps.stream().map(item -> {
    System.out.println(item.get("name"));
    System.out.println(item.get("age"));
    //一定要返回一个结果
    return item.get("name");
}).collect(Collectors.toList());
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值