Java对象、集合相关的工具

import com.google.common.collect.*;
import com.sun.istack.internal.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.hibernate.validator.constraints.Length;
import org.junit.jupiter.api.Test;
import org.springframework.beans.BeanUtils;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author zhanghao
 * @date 2021/7/5
 */
// Lombok
@Data
// @AllArgsConstructor、@NoArgsConstructor不能和Junit一起用
//@AllArgsConstructor
//@NoArgsConstructor
@EqualsAndHashCode
@ToString
public class UtilTest {

    // JDK
    @NotNull
    // Javax Validation
    @Min(1)
    @Max(2)
    private String s1;

    // Hibernate Validator
    @Length(min = 1, max = 2, message = "长度1到2")
    private String s2;

    @Test
    public void testGuava(){
        // Map常量,value不能是null
        ImmutableMap.of("key1", "value1", "key2", "value2");
        ImmutableMap.builder().put("key1", "value1").build();
        // Set常量,元素不能是空
        ImmutableSet.of(1, 2);
        // List常量,元素不能是空
        ImmutableList.of("a");
        // 相同的元素放到同一个List中
        Lists.partition(ImmutableList.of(1, 1, 2, 2, 3), 2);
    }

    @Test
    public void testJDK() throws Exception {
        // 大小写不敏感的相等
        "A".equalsIgnoreCase("a");
        // List去重
        new ArrayList<>().stream().distinct().collect(Collectors.toList());
        // 只要一个元素的List
        Collections.singletonList(1);
        // 断言对象
        Optional.of(new Object()).filter(o -> o == null).orElse(null);
        // 空
        Optional.empty();
        // 获取对象成员组成的List
        ImmutableList.of(new Object()).stream().map(Object::hashCode).collect(Collectors.toList());
        // 获取Map<对象成员, 对象>
        ImmutableList.of(new Object()).stream().collect(Collectors.toMap(Object::hashCode, Function.identity()));
        // 获取LinkedHashMap<对象成员, 对象>
        ImmutableList.of(new Object()).stream().collect(Collectors.toMap(Object::hashCode, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new));
        // 遍历Map
        ImmutableMap.of("key1", "value1").forEach((key, value) -> {});
        // 遍历List
        ImmutableList.of(1).forEach(item -> {});
        // 对象判空
        Objects.isNull(new Object());
        // 过滤元素
        ImmutableList.of(1, 2).stream().filter(o -> o > 0).collect(Collectors.toList());
        // 查找元素
        ImmutableList.of(1, 2).stream().filter(o -> o > 0).findAny().ifPresent(o -> {});
        ImmutableList.of(1, 2).stream().filter(o -> o > 0).findAny().orElseThrow(() -> new Exception());
        // 对象空则抛出NPE
        Objects.requireNonNull(new Object(), "object is null");
        // 获取Long的Int值
        ((Long)(1L)).intValue();
        // 对比
        "1".compareTo("2");
        ((Long)(1L)).compareTo(2L);
        // 获取List的交集
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        List<Integer> list2 = new ArrayList<>();
        list2.add(2);
        list2.add(3);
        list1.retainAll(list2);
        // 拼接元素
        ImmutableList.of("1", "2").stream().collect(Collectors.joining(","));
        // 筛选元素
        ImmutableList.of("1", "2").stream().noneMatch(Objects::nonNull);
        // 生成Map<相等的属性值,对象组成的List>
        ImmutableList.of(new Object(), new Object()).stream().collect(Collectors.groupingBy(Object::hashCode));
        // 相等判断
        Objects.equals(new Object(), new Object());
        // 排序
        List<Object> list3 = new ArrayList<>();
        list3.add(new Object());
        list3.add(new Object());
        list3.sort(Comparator.comparing(Object::hashCode));
    }

    @Test
    public void testCommonsLang3(){
        // String不为空时去首尾空格
        StringUtils.trim("1 ");
        // 获取带类名的异常消息
        ExceptionUtils.getMessage(new Throwable());
        // 获取异常的堆栈
        ExceptionUtils.getStackTrace(new Throwable());
        // 单一映射
        Pair.of("left", "right");
        // null或者""
        StringUtils.isEmpty("1");
        // null或者去除首尾空格后为""
        StringUtils.isBlank("1");
        // 线程池
        ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("thread-%d").build();
        ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), threadFactory);
        executor.submit(() -> {});
        // 判断字符串是否是数字
        StringUtils.isNumeric("1");
    }

    @Test
    public void testCommonsCollections4(){
        // 集合判空
        CollectionUtils.isEmpty(new ArrayList<String>());
        // 获取最后一个元素
        Iterables.getLast(ImmutableList.of(1));
    }

    @Test
    public void testSpringBeans(){
        // 对象属性拷贝
        BeanUtils.copyProperties(new Object(), new Object());
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>util-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>27.0.1-jre</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.2</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
        </dependency>

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.1.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.18.Final</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风铃峰顶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值