除去list中重复的对象数据 两个for循环性能差 有什么好的方法吗
有帮助的话采纳一下
用stream流 方便简单
List list = assignReferenceList.stream().map(AssignReference::getUserId).distinct().collect(Collectors.toList());
可以用HashSet一次循环遍历
可以换种思考方式,利用空间换时间~ 在 Java 中,可以利用 HashSet 或 LinkedHashSet 数据结构来移除列表中重复的对象数据,一次for循环就可以了~
如果对你有帮助,麻烦点一下已采纳,谢谢。
public static void main(String[] args) {
// 创建一个list
List<String> list = new ArrayList<>(Arrays.asList("Lambda方式删除1", "Lambda方式删除2", "奸细", "Lambda方式删除4"));
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("奸细")) {
list.remove(i);
}
}
}
或者这样
public static void main(String[] args) {
// 创建一个list
List<String> list = new ArrayList<>(Arrays.asList("Lambda方式删除1", "Lambda方式删除2", "奸细", "Lambda方式删除4"));
for (String s : list) {
if ("奸细".equals(s)) {
list.remove(s);
}
}
}
或
public static void main(String[] args) {
// 创建一个list
List<String> list = new ArrayList<>(Arrays.asList("Lambda方式删除1", "Lambda方式删除2", "奸细", "Lambda方式删除4"));
// 使用迭代器删除“奸细”
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
if ("奸细".equals(iterator.next())) {
iterator.remove();
}
}
}
推荐使用
要在Java中去除列表中重复的对象数据,并且避免使用性能较差的双重循环,可以按照以下步骤进行操作:
Set<Object> set = new HashSet<>();
List<Object> list = new ArrayList<>();
// 遍历列表中的每个对象
for (Object obj : list) {
set.add(obj);
}
List<Object> uniqueList = new ArrayList<>(set);
完整的代码示例:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
// 添加对象数据到列表
Set<Object> set = new HashSet<>();
// 遍历列表中的每个对象
for (Object obj : list) {
set.add(obj);
}
List<Object> uniqueList = new ArrayList<>(set);
// 去重后的对象数据
}
}
请注意,以上代码只能判断对象的内容是否相等,如果你需要自定义对象的去重规则,可以重写对象的equals()和hashCode()方法,并在HashSet的构造方法中传入一个自定义的比较器。
参考资料: