一、如果List中是字符串时

先将List转为Set集合,再将Set集合转成List

代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MySpringBootApplication.class)
public class ListTest {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("你好");
        list.add("早上好");
        list.add("你好");
        list.add("晚上好");
        for (String s : list) {
            System.out.println(s);
        }
     System.out.println("-----------");
//使用set去重 Set<String> set = new HashSet<>(list); List<String> list1 = new ArrayList<>(set); for (String s : list1) { System.out.println(s); } } }

结果如下:

你好
早上好
你好
晚上好
-----------
你好
早上好
晚上好

上面是对List进行去重,下面对String[]字符串数组进行去重

String[] fileArr1 = rectify.getRectifyFile().split(",");
        // 对fileArr1进行去重
        List<String> list = Arrays.asList(fileArr1); // 字符串数组转为List
        //使用set去重
        Set<String> set = new HashSet<>(list);
        // 将set转成字符串数组
        String[] fileArr = new String[set.size()];
        int index = 0;
        for (String element : set) {
            fileArr[index++] = element;
        }

 

二、如果List中是对象时

1、如果对对象中的某个字段进行去重

我们根据对象中的唯一索引使用set集合对list对象去重。

Role对象

@Data
@AllArgsConstructor
public class Role {
    /**
     * 角色id主键
     */
    private Integer roleId;
    /**
     * 角色名称
     */
    private String roleName;
    /**
     * 职能描述
     */
    private String remark;

}

测试类:

public class Demo01 {
    public static void main(String[] args) {
        Role role1 = new Role(1, "开发", "aa");
        Role role2 = new Role(2, "测试", "bb");
        Role role3 = new Role(3, "运维", "cc");
        Role role4 = new Role(4, "开发", "aa");
        List<Role> roles = new ArrayList<>();
        roles.add(role1);
        roles.add(role2);
        roles.add(role3);
        roles.add(role4);
        List<Role> roles1 = new ArrayList<>();
        Set<String> set = new HashSet<>();
        roles.stream().forEach(item ->{
            if (set.add(item.getRoleName())) {
                roles1.add(item);
            }
        });
        roles1.stream().forEach(System.out::println);
    }
}

结果:

Role(roleId=1, roleName=开发, remark=aa)
Role(roleId=2, roleName=测试, remark=bb)
Role(roleId=3, roleName=运维, remark=cc)

注意:set集合的add方法中,如果set集合已经包含该元素,那么set集合就不会改变并返回false。

2、如果根据对象中的所有字段去重

类似于List中是字符串的情况。

public class RemoveDuplicates {
    public static void main(String[] args) {
        Role role1 = new Role(4, "开发", "aa");
        Role role2 = new Role(2, "测试", "bb");
        Role role3 = new Role(3, "运维", "cc");
        Role role4 = new Role(4, "开发", "aa");
        List<Role> roles = new ArrayList<>();
        roles.add(role1);
        roles.add(role2);
        roles.add(role3);
        roles.add(role4);
        //去除重复数据
        List<Role> roles1 = new ArrayList<>(new LinkedHashSet<>(roles));
        roles1.stream().forEach(System.out::println);
    }
}

结果如下:

Role(roleId=4, roleName=开发, remark=aa)
Role(roleId=2, roleName=测试, remark=bb)
Role(roleId=3, roleName=运维, remark=cc)

 

posted on 2021-12-12 20:53  周文豪  阅读(482)  评论(0编辑  收藏  举报