list集合对象按照对象某个字段进行去重

public class DuplicateOrderTest {
    public static void main(String[] args) {
        List<OrderVO> orderList = new ArrayList<OrderVO>();
        OrderVO orderVO = new OrderVO();
        orderVO.setOrderNo("11");
        orderVO.setUserId("aa");
        orderList.add(orderVO);

        orderVO = new OrderVO();
        orderVO.setOrderNo("22");
        orderVO.setUserId("bb");
        orderList.add(orderVO);

        orderVO = new OrderVO();
        orderVO.setOrderNo("33");
        orderVO.setUserId("aa");
        orderList.add(orderVO);
        
        List<OrderVO> dataList = removeDuplicateOrder(orderList);
        for(OrderVO data : dataList){
            System.out.println(data.getOrderNo() + ":" + data.getUserId());
        }
    }

    /**
     * 去重
     * 
     * @param orderList 集合
     * @return 去重后的集合
     * @author lsl
     */
    private static List<OrderVO> removeDuplicateOrder(List<OrderVO> orderList) {
        Set<OrderVO> set = new TreeSet<OrderVO>(new Comparator<OrderVO>() {
            @Override
            public int compare(OrderVO a, OrderVO b) {
                // 字符串则按照asicc码升序排列
                return a.getUserId().compareTo(b.getUserId());
            }
        });
        
        set.addAll(orderList);
        return new ArrayList<OrderVO>(set);
    }
}

执行结果:

11:aa

22:bb

Java中,对于一个对象集合,如果想要根据某个字段进行,可以使用`Stream`的`distinct`方法结合`map`方法来实现。 假设我们有一个`List<Person>`类型的列表,其中`Person`类包含`name`和`age`两个字段,现在想要根据`name`字段进行,可以按照以下步骤进行操作: 1. 使用`map`方法将`Person`对象映射为其`name`字段的值; 2. 使用`distinct`方法对`name`字段进行; 3. 使用`map`方法将`name`字段的值新转换为`Person`对象。 具体实现代码如下: ``` List<Person> list = Arrays.asList( new Person("Tom", 20), new Person("Jerry", 22), new Person("Tom", 25), new Person("Alice", 18), new Person("Jerry", 23) ); List<Person> result = list.stream() .map(Person::getName) // 映射为name字段 .distinct() // 根据name字段进行 .map(name -> list.stream() .filter(person -> person.getName().equals(name)) .findFirst() .orElse(null)) // 转换为Person对象 .collect(Collectors.toList()); System.out.println(result); ``` 输出结果为: ``` [Person{name='Tom', age=20}, Person{name='Jerry', age=22}, Person{name='Alice', age=18}] ``` 在这个例子中,我们首先使用`map`方法将`Person`对象映射为其`name`字段的值,然后使用`distinct`方法对`name`字段进行。最后使用另一个`map`方法将`name`字段的值新转换为`Person`对象。注意,这里使用了`findFirst`方法来获取第一个符合条件的`Person`对象,如果找不到则返回`null`。 需要注意的是,这种做法的时间复杂度为O(n^2),因为在第三个`map`方法中,每次都需要对原始列表进行一次遍历。因此,如果列表非常大,建议使用其他更高效的数据结构或算法来实现
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值