现在我要将一个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());