【问题标题】:ANDROID: remove duplicates string [duplicate]ANDROID:删除重复字符串[重复]
【发布时间】:2019-07-28 05:34:20
【问题描述】:

我在完全删除 List<String> 中的重复字符串时遇到问题

String [] myno1 = new String [] {"01", "02", "03", "04", "05", "06",
"07", "08", "09", "10", "11", "12", "13", "14", "15"};

String [] myno = new String [] {"01", "03", "15"};

List<String> stringList = new ArrayList<String>(Arrays.asList(myno));

List<String> stringList1 = new ArrayList<String>(Arrays.asList(myno1));

stringList.addAll(stringList1);

Set<String> set = new HashSet<>(stringList);
stringList.clear();
stringList.addAll(set);

System.out.println("=== s:" +stringList);

但我明白了:

=== s:[15, 13, 14, 11, 12, 08, 09, 04, 05, 06, 24, 07, 01, 02, 03, 10]

我希望结果是这样的:

=== s:[13, 14, 11, 12, 08, 09, 04, 05, 06, 24, 07, 02, 10]

【问题讨论】:

  • 你能澄清你到底想做什么吗?您是否要创建一个组合“myno”和“myno1”的列表,使其包含除两个列表中包含的项目之外的所有内容(即异或操作)?

标签: java android arrays arraylist


【解决方案1】:

拿去吧:

String[] myno1 = new String[]{"01", "02", "03", "04", "05", "06", "07", 
                              "08", "09", "10", "11", "12", "13", "14", "15"};
String[] myno2 = new String[]{"01", "03", "15"};

// use LinkedHashSet to preserve order
Set<String> set1 = new LinkedHashSet<>(Arrays.asList(myno1));
Set<String> set2 = new LinkedHashSet<>(Arrays.asList(myno2));

// find duplicates
Set<String> intersection = new LinkedHashSet<>();
intersection.addAll(set1);
intersection.retainAll(set2);

// remove duplicates from both sets
Set<String> result = new LinkedHashSet<>();
result.addAll(set1);
result.addAll(set2);
result.removeAll(intersection);

System.out.println("Result: " + result);

Result: [02, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14]

【讨论】:

  • 我明白了!非常感谢~:)
【解决方案2】:

因为您必须从另一个列表中删除项目。 HashSet&lt;&gt;() 用于从同一数组列表中删除重复项。例如,如果列表包含 15 两次和 3 两次,那么它将在列表中保持单次。

这里是代码

foreach(String str : stringList){

stringList1.remove(str);
}

【讨论】:

  • 这不是他想要的。
【解决方案3】:

如果你使用 Java 8 或 +,你可以使用这个:

String[] myno1 = new String[] { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15" };
String[] myno = new String[] { "01", "03", "15" };
List<String> stringList = new ArrayList<>(Arrays.asList(myno));
List<String> stringList1 = new ArrayList<>(Arrays.asList(myno1));
stringList.addAll(stringList1);

List<String> newList = stringList.stream()
            .filter(string -> Collections.frequency(stringList, string) == 1)
            .collect(Collectors.toList());
System.out.println("=== s:" + newList);

不需要对代码进行太多更改。制作了一个没有插入重复元素的新列表。输出是:

=== s:[02, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14]

【讨论】:

  • 我明白了!非常感谢~:)
猜你喜欢
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 2017-12-26
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多