List去重3种方式

在实战中,list去重操作十分频繁。博客介绍了三种list去重方法,包括原始代码去重、Set去重(存在元素无序缺点),并分别给出了测试类和结果。

一、背景

1.在实战中list去重是非常频繁的,下面就讲讲它的三种用法。

二、第一种(原始代码去重)

1.测试类

public class DemoTest {
    public static void main(String[] args) {
        ArrayList<String> list = Lists.newArrayList("02","01","01","02","03");
        System.out.println("原始的去重方法");
        ArrayList<String> listTemp = Lists.newArrayList();
        for (String e:list){
            if (!listTemp.contains(e)){
                listTemp.add(e);
            }
        }
        System.out.println(listTemp);
    }
}

2.结果

原始的去重方法
[02, 01, 03]

三、第二种方法

1.Set去重缺点是,元素是无序的

2.测试类

public class DemoTest {
    public static void main(String[] args) {
        ArrayList<String> list = Lists.newArrayList("02","01","01","02","03");
        System.out.println("set去重");
        Set<String> set = Sets.newHashSet(list);
        System.out.println(set);
    }
}

3.结果

set去重
[01, 02, 03]

四、第三种方法

1.测试类

public class DemoTest {
    public static void main(String[] args) {
        ArrayList<String> list = Lists.newArrayList("02","01","01","02","03");
        System.out.println("函数式去重");
        List<String> collect = list.stream().distinct().collect(Collectors.toList());
        System.out.println(collect);
    }
}

2.结果

函数式去重
[02, 01, 03]

五、结束

Always keep the faith!!!

 

### 回答1: 在 Java 中,可以使用以下几种方式实现 List : 1. 利用 Set 。将 List 中的元素存放到 Set 中,自动复元素,然后再将 Set 转换回 List。示例代码: ```java List<Integer> list = Arrays.asList(1, 2, 2, 3, 3, 3, 4, 4, 4, 4); List<Integer> newList = new ArrayList<>(new HashSet<>(list)); System.out.println(newList); // [1, 2, 3, 4] ``` 2. 利用 Java 8 中的 Stream 。利用 Stream 的 distinct() 方法对 List 进行。示例代码: ```java List<Integer> list = Arrays.asList(1, 2, 2, 3, 3, 3, 4, 4, 4, 4); List<Integer> newList = list.stream().distinct().collect(Collectors.toList()); System.out.println(newList); // [1, 2, 3, 4] ``` 3. 利用循环遍历。利用双循环遍历 List,将复的元素删除。示例代码: ```java List<Integer> list = Arrays.asList(1, 2, 2, 3, 3, 3, 4, 4, 4, 4); for (int i = 0; i < list.size() - 1; i++) { for (int j = i + 1; j < list.size(); j++) { if (list.get(i).equals(list.get(j))) { list.remove(j); j--; } } } System.out.println(list); // [1, 2, 3, 4] ``` 以上三种方法都可以实现 List ,具体使用哪一种方法可以根据实际情况选择。 ### 回答2: 在Java中,可以使用以下几种方式List进行: 1. 使用Set集合:将List作为参数传递给Set的构造函数,然后再将Set转换回List。由于Set的元素不能复,这样就能实现的效果。 ```java List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("A"); list.add("C"); Set<String> set = new LinkedHashSet<>(list); List<String> distinctList = new ArrayList<>(set); System.out.println(distinctList); // 输出:[A, B, C] ``` 2. 使用Java 8的Stream API:通过使用Java 8引入的流操作,我们可以很方便地对List进行。 ```java List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("A"); list.add("C"); List<String> distinctList = list.stream().distinct().collect(Collectors.toList()); System.out.println(distinctList); // 输出:[A, B, C] ``` 这里使用了`distinct()`方法来复的元素,并使用`collect(Collectors.toList())`将流转换为List3. 自定义比较器:如果要对自定义对象的List进行,可以通过自定义对象的`equals()`和`hashCode()`方法来实现的逻辑。 ```java class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } Person person = (Person) obj; return Objects.equals(name, person.getName()); } @Override public int hashCode() { return Objects.hash(name); } } List<Person> list = new ArrayList<>(); list.add(new Person("John")); list.add(new Person("Mary")); list.add(new Person("John")); List<Person> distinctList = list.stream().distinct().collect(Collectors.toList()); System.out.println(distinctList); // 输出:[John, Mary] ``` 这里写了`Person`类的`equals()`和`hashCode()`方法,通过比较对象的`name`属性来判断是否相等,从而实现了的效果。 ### 回答3: Java中List方式有多种。 1. 使用Set:将List转化为Set,Set特性是不允许复元素的,所以会自动List中的复元素。然后将Set再转化回List即可实现。 ```java List<Integer> list = new ArrayList<Integer>(); // 原始List // 添加元素到list... Set<Integer> set = new HashSet<Integer>(list); // 将List转为Set,复元素 List<Integer> dedupList = new ArrayList<Integer>(set); // 将Set转为List ``` 2. 使用Java 8的Stream:利用Stream的distinct()方法,可以根据元素的自然顺序或指定的比较器,List中的元素。 ```java List<Integer> list = new ArrayList<Integer>(); // 原始List // 添加元素到list... List<Integer> dedupList = list.stream().distinct().collect(Collectors.toList()); // 利用Stream ``` 3. 使用Apache Commons Collections工具类:使用CollectionUtils工具类的removeDuplicates()方法,可以List中的复元素。 ```java List<Integer> list = new ArrayList<Integer>(); // 原始List // 添加元素到list... CollectionUtils.removeDuplicates(list); // List中的复元素 ``` 这些方法都可以实现List,具体根据使用环境和需求选择适合的方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值