你可以使用Java 8中的Stream API来实现这个方法。首先,你需要创建一个包含对象集合的List。假设你有一个名为objects的List,其中的元素类型为Object,其中包含字段A。

然后,你可以使用Stream的distinct()方法来过滤掉重复的对象,然后使用findFirst()方法获取第一个元素的下标。最后,你可以使用collect()方法将结果收集到一个新的List中。

以下是示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        // 创建对象集合
        List<Object> objects = new ArrayList<>();
        objects.add(new MyObject("A"));
        objects.add(new MyObject("B"));
        objects.add(new MyObject("A"));
        objects.add(new MyObject("C"));
        objects.add(new MyObject("B"));

        // 使用Stream获取字段A不一样的元素下标
        List<Integer> indexes = getDistinctIndexes(objects);

        // 输出结果
        System.out.println(indexes);
    }

    public static List<Integer> getDistinctIndexes(List<Object> objects) {
        return objects.stream()
                .distinct()
                .map(objects::indexOf)
                .collect(Collectors.toList());
    }

    static class MyObject {
        private String fieldA;

        public MyObject(String fieldA) {
            this.fieldA = fieldA;
        }

        public String getFieldA() {
            return fieldA;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null || getClass() != obj.getClass()) {
                return false;
            }
            MyObject other = (MyObject) obj;
            return fieldA.equals(other.fieldA);
        }

        @Override
        public int hashCode() {
            return fieldA.hashCode();
        }
    }
}

在上述示例中,我们创建了一个包含对象集合的List,其中对象的类型为MyObject,该对象包含字段fieldA。我们使用getDistinctIndexes()方法来获取字段fieldA不一样的元素下标。最后,我们将结果打印出来。

注意,在MyObject类中,我们重写了equals()和hashCode()方法,以确保相同字段fieldA的对象被视为相等。这是为了使distinct()方法正常工作

Java中我有一个对象集合对象中有一个字段A写一个方法使用stream获取对象集合中字段A不一样的元素下标若有字段A相同的对象则忽略只取第一个获取到的元素的下标返回一个List

原文地址: https://www.cveoy.top/t/topic/iFsL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录