当前位置:编程学习 > JAVA >>

java提取一个数组list属性赋值给新数组list

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

使用Java Stream API将List<User>转换为List<String>,提取User对象的name属性。同时,也探讨了将List<Map<String, Object>>转换成List<String>的过程,证实了map()方法的灵活性,可以应用于Map对象并进行业务逻辑处理。这种方法在处理集合数据转换时非常实用。

现在我要将一个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());
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,