Android:删除重复的字符串



我在完全删除 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,04,05,06,24,24,07,01,02,02,03,10]

我希望结果是这样:

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

接受:

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]

您必须从另一个列表中删除项目。HashSet<>()用于从同一数组列表中删除副本。例如,如果列表包含15次两次和3次,则将在列表中保持单个时间。

这是代码

foreach(String str : stringList){
stringList1.remove(str);
}

如果使用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]

最新更新