一、如果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)