Hutool

448 阅读2分钟

Hutool

    // JSONUtil.toJsonStr可以将任意对象(Bean、Map、集合等)直接转换为JSON字符串
    List<User> list = Arrays.asList(new User("zhangsan","pass"),new User("lisi","pass"));
    String s = JSONUtil.toJsonStr(list);
    // result : [{"pass":"pass","name":"zhangsan"},{"pass":"pass","name":"lisi"}]
​
    // 字符串解析
    String html = "{"name":"Something must have been changed since you leave"}";
    JSONObject jsonObject = JSONUtil.parseObj(html); // 转成JsonObject对象
    jsonObject.getStr("name");
    // result : Something must have been changed since you leave
​
    // JSON转Bean,在JSON里{}是Ojbect(也就是对象)
    String html = "{"pass":"pass","name":"zhangsan"},{"pass":"pass","name":"lisi"}";
    User user = JSONUtil.toBean(html, User.class);
 
    // 转List<T>,[]是 Array(也就是数组)
    String html = "[{"pass":"pass","name":"zhangsan"},{"pass":"pass","name":"lisi"}]";
    List<User> users = JSONUtil.toList(JSONUtil.parseArray(html), User.class);  

    // 当json为map格式时
    String str = "{"user":[{"id":"111","name":"zhangsan"},{"id":"222","name":"lisi"}]}";
    Map map = (Map)JSONUtil.parse(str);
    List<User> user = JSONUtil.toList(JSONUtil.parseArray(map.get("user")), User.class);

Stream

    // 固定长度,不能调用add添加元素
    List<String> list = Arrays.asList("2","1");
​
    // 创建动态list,可添加元素
    List<String> collect = Stream.of("1", "2").collect(Collectors.toList());
    collect.add("3");
​
    // 取对象的某一列
    List<User> userList = Arrays.asList(new User("10","9"),new User("100","5"));
    List<String> collect1 = userList.stream().map(User::getName).collect(Collectors.toList());
​
    // sorted 排序  Comparator.comparing(User::getId) 根据Id比较排序
    List<User> collect7 = userList.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
​
    // sorted 根据时间倒叙排序
    List<User> collect8 = userList.stream().sorted(Comparator.comparing(User::getTime).reversed()).collect(Collectors.toList());
​
    // 过滤
    List<User> zhangsan = userList.stream().filter(user -> user.getName().equals("zhangsan")).collect(Collectors.toList());
    
    // 根据过滤条件计算数量
    long count = list.stream().filter(task -> task.getStatus().equals(JobTaskStatusEnum.COMPLETED.getCode())).count();
​
    // list 转 map  Function.identity() == t->t
    // 问题1: Duplicate key ---- 使用(k1, k2) -> k2,解决key重复问题,重复时key2会覆盖前面的key1
    // 问题2: NullPointerException -- 使用filter过滤,map中value空指针异常
    Map<String, User> collect2 = userList.stream().filter(user -> user!=null).collect(Collectors.toMap(User::getId, Function.identity(),(k1, k2) -> k2));
    
        ​
    // list 转 Map<String,List<>>
    Map<String, List<User>> dataMap = userList.stream().collect(Collectors.groupingBy(User::getId, Collectors.mapping(user -> user, Collectors.toList())));

​
    // 将map的value转成list
    List<User> collect3 = collect2.entrySet().stream().map(u -> u.getValue()).collect(Collectors.toList());
​
    // 只要有一个条件满足即返回true
    System.out.println(userList.stream().anyMatch(user -> user.getId().equals("0"))); 
    // 必须全部都满足才会返回true
    System.out.println(userList.stream().allMatch(user -> user.getId().equals("0"))); 
    // 全都不满足才会返回true
    System.out.println(userList.stream().noneMatch(user -> user.getId().equals("0")));
​
    // stream().forEach适合用并发执行
    userList.forEach(user -> {});
    userList.stream().forEach(user -> {});
​
    // 去重
    List<String> collect4 = list.stream().distinct().collect(Collectors.toList());
​
    // 截取 无越界
    List<String> collect5 = list.stream().limit(100).collect(Collectors.toList());
    
    // 根据size将userList分割成几份
    List<List<User>> partition = Lists.partition(userList, size);
​
    // 跳过 无越界
    List<String> collect6 = list.stream().skip(100).collect(Collectors.toList());