繁体   English   中英

如何从Java列表中删除具有相同值的对象

[英]how to delete object with same values from a java list

说我有一个对象,其id: Stringname: String字段。

如果我有这些对象的数组,则使用remove方法,因为从技术上讲,Object指针是不同的,所以我要删除的对象不会被删除。

例如:

List<ObjectA> newList = new ArrayList<>();
// Objecta1(id: a, name: a)
// Objecta2(id: b, name: b)
// Objecta3(id: b, name: b)
newList.add(objecta1);
newList.add(objecta2);
newList.remove(objecta3); --> will equal false

清除此错误的最干净方法是什么?

我四处搜索,发现可以使用removeIf并在那里进行比较。 我也可以使用Iterator,然后自己比较这些字段。 只是想知道在Java中是否有一种规范,干净的方式来做到这一点。 谢谢。

您的对象应@Override equals方法。

将以下内容添加到您的课程中:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof ObjectA)) return false;

    ObjectA objectA = (ObjectA) o;

    if (getId() != objectA.getId()) return false;
    return getName() != null ? getName().equals(objectA.getName()) : objectA.getName() == null;

}

@Override
public int hashCode() {
    int result = getId();
    result = 31 * result + (getName() != null ? getName().hashCode() : 0);
    return result;
}

接着:

while(newList.remove(objecta3)){};

除了解决方案覆盖equals ,您还可以使用Java 8进行操作:

newList.removeIf(p -> p.getId().equals(objecta3.getId()));

如何添加和删除<object>从(和到)LiveData <list<object> &gt;?<div id="text_translate"><p> 我有一个用 LiveData&lt;List&gt; currentList 填充的 recyclerView。 我采用 Single&lt;List&gt; 并在 onSuccess 方法中使用 currentList.setValue(people) 添加人员(请参见下面的代码)。 但是当我打开应用程序时,recyclerView 中只有 1 个 object。 我的任务是: 1)当应用程序打开时,它必须将 4 人添加到 recyclerView(即 currentList); 2) 在 onSwipe 方法之后,它必须删除第一个并将 RoomDatabase 中的 1 个新随机添加到 currentList 的末尾。</p><p> 这意味着我需要将对象删除和添加到 LiveData&lt;List&gt; 的方法。 我怎样才能做到这一点? (ViewModel 代码如下)</p><pre> public class PersonViewModel extends AndroidViewModel { private PersonRepository mRepository; private CompositeDisposable composite = new CompositeDisposable(); private Single&lt;List&lt;Person&gt;&gt; mGuyWho; // это нада??? LOBNYA private Single&lt;Person&gt; mGuy; // PSKOV private MutableLiveData&lt;List&lt;Person&gt;&gt; currentList = new MutableLiveData&lt;&gt;(); public PersonViewModel(@NonNull Application application) { super(application); mRepository = new PersonRepository(application); mGuyWho = mRepository.getGuyWho(); //это нада?? LOBNYA mGuy = mRepository.getGuy(); // PSKOV mGuyWho.subscribeOn(Schedulers.io()) // LOBNYA nachalo.observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver&lt;List&lt;Person&gt;&gt;() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe(Disposable d): called"); composite.add(d); } @Override public void onSuccess(List&lt;Person&gt; people) { Log.d(TAG, "onSuccess: called"); currentList.setValue(people); // here I pass List to LiveData&lt;List&gt; } @Override public void onError(Throwable e) { Log.d(TAG, "onError: called"); Toast.makeText(application, "NO DATA", Toast.LENGTH_SHORT).show(); } }); // LOBNYA konets mGuy.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver&lt;Person&gt;() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe(Disposable d): called"); composite.add(d); } @Override public void onSuccess(Person person) { Log.d(TAG, "onSuccess: called"); currentList.setValue(person); // there is an error, for I cannot bypass &lt;Person&gt; to LiveData&lt;List&lt;&gt;&gt; } @Override public void onError(Throwable e) { Log.d(TAG, "onError: called"); } }) } LiveData&lt;List&lt;Person&gt;&gt; getCurrentList() { return currentList; } };</pre> </div></list<object></object>

[英]how to add and delete <Object> from (and to) LiveData<List<Object>>?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何从List对象中的新对象中设置属性值,并获得使用Java 8设置属性的相同对象的新List? Java:如何将随机生成的数字列表中的值放入对象中 如何将相同 object 类型列表中相同字段的值汇总为一个 object 如何从堆中删除Java对象? 如何从列表创建HashSet <Object> 通过使用Java8 Stream从对象获取多个字段值? JAVA 8 要从列表分配给对象的内存/集合/列表值 如何在Java中通过名称链接列表删除和搜索对象? 如何添加和删除<object>从(和到)LiveData <list<object> &gt;?<div id="text_translate"><p> 我有一个用 LiveData&lt;List&gt; currentList 填充的 recyclerView。 我采用 Single&lt;List&gt; 并在 onSuccess 方法中使用 currentList.setValue(people) 添加人员(请参见下面的代码)。 但是当我打开应用程序时,recyclerView 中只有 1 个 object。 我的任务是: 1)当应用程序打开时,它必须将 4 人添加到 recyclerView(即 currentList); 2) 在 onSwipe 方法之后,它必须删除第一个并将 RoomDatabase 中的 1 个新随机添加到 currentList 的末尾。</p><p> 这意味着我需要将对象删除和添加到 LiveData&lt;List&gt; 的方法。 我怎样才能做到这一点? (ViewModel 代码如下)</p><pre> public class PersonViewModel extends AndroidViewModel { private PersonRepository mRepository; private CompositeDisposable composite = new CompositeDisposable(); private Single&lt;List&lt;Person&gt;&gt; mGuyWho; // это нада??? LOBNYA private Single&lt;Person&gt; mGuy; // PSKOV private MutableLiveData&lt;List&lt;Person&gt;&gt; currentList = new MutableLiveData&lt;&gt;(); public PersonViewModel(@NonNull Application application) { super(application); mRepository = new PersonRepository(application); mGuyWho = mRepository.getGuyWho(); //это нада?? LOBNYA mGuy = mRepository.getGuy(); // PSKOV mGuyWho.subscribeOn(Schedulers.io()) // LOBNYA nachalo.observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver&lt;List&lt;Person&gt;&gt;() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe(Disposable d): called"); composite.add(d); } @Override public void onSuccess(List&lt;Person&gt; people) { Log.d(TAG, "onSuccess: called"); currentList.setValue(people); // here I pass List to LiveData&lt;List&gt; } @Override public void onError(Throwable e) { Log.d(TAG, "onError: called"); Toast.makeText(application, "NO DATA", Toast.LENGTH_SHORT).show(); } }); // LOBNYA konets mGuy.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver&lt;Person&gt;() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe(Disposable d): called"); composite.add(d); } @Override public void onSuccess(Person person) { Log.d(TAG, "onSuccess: called"); currentList.setValue(person); // there is an error, for I cannot bypass &lt;Person&gt; to LiveData&lt;List&lt;&gt;&gt; } @Override public void onError(Throwable e) { Log.d(TAG, "onError: called"); } }) } LiveData&lt;List&lt;Person&gt;&gt; getCurrentList() { return currentList; } };</pre> </div></list<object></object> 如何从java中的List中删除两个具有相同类的不同对象 在Java中将相同的对象添加到列表
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM