java8的新特性使用起来非常的方便,详情参考Java8新特性。
1.获取list集合中对象的某个属性值
1)需求:现有一个包含用户对象的集合,想只获取这些用户的姓名组成一个集合,如何去做?
2)演示
用户对象如下:
@Data public class User { private Integer id; private String name; private String phone; }
列表如下(演示数据):
List<User> userList = new ArrayList<>(); for (int i = 0; i < 5; i++) { User user = new User(); user.setId(i + 1); user.setName(\"张\" + (i + 1) + \"方\"); userList.add(user); }
第一种方式:遍历用户对象的集合进行获取
List<String> nameList = new ArrayList<>(); userList.stream().forEach(user -> nameList.add(user.getName()));
第二种方式:使用流方式提前数据(推荐)
List<String> nameList = userList.stream().map(User::getName).collect(Collectors.toList());
2.对list集合元素过滤取赋值
1)需求:现有一个包含行政区对象的集合,根据父级id获取所有行政区的父级编码,如何去做?
2)演示
用户对象如下:
列表如下(演示数据):
List<AreaCode> list = new ArrayList<>(); list.add(new AreaCode(1, \"湖北省\", \"101\", 0, null)); list.add(new AreaCode(2, \"武汉市\", \"10101\", 1, null)); list.add(new AreaCode(3, \"黄冈市\", \"10102\", 1, null)); list.add(new AreaCode(4, \"洪山区\", \"1010101\", 2, null)); list.add(new AreaCode(5, \"江夏区\", \"1010102\", 2, null)); list.add(new AreaCode(6, \"江岸区\", \"1010103\", 2, null)); list.add(new AreaCode(6, \"阳新县\", \"1010201\", 3, null));
使用get()过滤符合条件的元素
list.stream().forEach(l -> { String code = \"0\"; if (l.getParentId() != 0) { AreaCode areaCode = list.stream().filter(s -> s.getId().equals(l.getParentId())).findAny().get(); code = areaCode.getCode(); } l.setParentCode(code); });
先对整个集合进行遍历,顶级元素除外,过滤出集合中id是当前元素父Id的元素,将其编码赋值给当前元素的对应属性。看起来有些绕,但对于数据的过滤是非常方便的。
3.判断list集合对象的字段是否存在某个值
1)需求:现有一个用户对象的集合,判断其中是否包含姓名为张三的用户,如何去做?
2)演示
用户对象如下:
@Data @Accessors(chain = true) @AllArgsConstructor @NoArgsConstructor public class User { private Integer id; private String name; private String phone; }
列表如下(演示数据):
List<User> userList = new ArrayList<>(); userList.add(new User(1, \"张三丰\", \"15645854585\")); userList.add(new User(2, \"张三\", \"15645857858\")); userList.add(new User(3, \"李四\", \"15945854566\")); userList.add(new User(4, \"王五\", \"15755554585\")); userList.add(new User(5, \"张三\", \"15852254585\"));
使用isPresent()进行判断
boolean exist1 = userList.stream().filter(user -> \"张三\".equals(user.getName())).findAny().isPresent();
其返回boolean类型,包含时返回true,不包含时返回false。
当然可以使用get()方法获取此元素的值,其返回的值是第一个符合条件的元素:
User user = userList.stream().filter(user -> \"张三\".equals(user.getName())).findAny().get();
这里的user内容就是集合元素中的第2个元素(id为2的用户信息)。
来源:https://www.cnblogs.com/zys2019/p/15966519.html
本站部分图文来源于网络,如有侵权请联系删除。