【问题标题】:To remove duplicate from an arraylist in andriod从android中的arraylist中删除重复项
【发布时间】:2020-05-25 19:06:40
【问题描述】:

我有一个简单的数组列表,它被填充到一个列表视图中,我想知道是否可以从填充的数组列表中删除重复项

        tetClassArrayList2 = new ArrayList<>();

        tetClassArrayList2.add((new tetClass("Action")));
        tetClassArrayList2.add((new tetClass("Adventure")));
        tetClassArrayList2.add((new tetClass("Animation")));
        tetClassArrayList2.add((new tetClass("Biography")));
        tetClassArrayList2.add((new tetClass("Action")));
        tetClassArrayList2.add((new tetClass("Comedy")));
        tetClassArrayList2.add((new tetClass("Action")));
        tetClassArrayList2.add((new tetClass("Animation")));
        tetClassArrayList2.add((new tetClass("Crime")));
        tetClassArrayList2.add((new tetClass("Animation")));
        tetClassArrayList2.add((new tetClass("Biography")));
        tetClassArrayList2.add((new tetClass("Action")));

        tetAdapter = new tetAdapter(UploadTet.this, tetClassArrayList2);
        listView2.setAdapter(tetAdapter);

代码工作正常,但我希望重新填充列表视图,并在 buttonclick 上删除重复项,以便 arrayList 可以像这样填充在列表视图中

        tetClassArrayList2.add((new tetClass("Action")));
        tetClassArrayList2.add((new tetClass("Adventure")));
        tetClassArrayList2.add((new tetClass("Animation")));
        tetClassArrayList2.add((new tetClass("Biography")));
        tetClassArrayList2.add((new tetClass("Comedy")));
        tetClassArrayList2.add((new tetClass("Crime")));

【问题讨论】:

  • 请告诉我们您尝试了什么?
  • 为什么不用一套呢?

标签: java list android-studio sorting arraylist


【解决方案1】:

首先,您需要确保 TestClass 已实现 equalshashCode

public class TestClass {

    private String name;

    public TestClass(String name) {
      this.name = name;
    }

    @Override
    public boolean equals(Object o) {
      if (this == o) return true;
      if (o == null || getClass() != o.getClass()) return false;
      TestClass testClass = (TestClass) o;
      return Objects.equals(name, testClass.name);
    }

    @Override
    public int hashCode() {
      return Objects.hash(name);
    }

    //other getters & setters
}

现在,您可以使用来自stream API 的distinct

List<TestClass> list = list.stream()
  .distinct()
  .collect(Collectors.toList());

或者你可以这样做

List<TestClass> list = new ArrayList<>(new HashSet<>(list));

例子:

public static void main(String[] args) {
    List<TestClass> list = new ArrayList<>();

    list.add((new TestClass("Action")));
    list.add((new TestClass("Adventure")));
    list.add((new TestClass("Action")));

    list = list.stream()
             .distinct()
             .collect(Collectors.toList());

}

【讨论】:

  • 好的,除了列表来自哪里之外,我如何使用与我已经拥有的代码相关的任何一个选项,它是 arrayList 还是 listview。请显示完整的代码,例如如何制作 tetClass第二个选项有equals和hashCode方法
猜你喜欢
  • 1970-01-01
  • 2018-05-29
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
相关资源
最近更新 更多