• Java新特性扩展之List集合操作


    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的用户信息)。

  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/zys2019/p/15966519.html
Copyright © 2020-2023  润新知