如何从ArrayList中删除重复的字符串

时间:2019-04-19 20:21:41

标签: java arraylist

对于分配,我必须创建一个方法,该方法接受ArrayList并从中删除重复的元素(不区分大小写)。此外,它需要更改元素的大小写以匹配ArrayList中该字符串最后一次出现的大小写。

现在,我正在尝试一个三步过程:创建一个新的字符串ArrayList,并用与输入元素相同的元素填充它。然后,我使用嵌套的for循环进行迭代,将元素的重复项更改为“ REMOVE_THIS_STRING”,并更改每个String的第一个实例以匹配最后一个实例的大写字母。然后,在另一个循环中,我检查并删除所有与“ REMOVE_THIS_STRING”字符串匹配的元素。我知道这不是处理问题的最有效方法,但是我没有与其他类型的集合进行过多的合作,因此我犹豫要立即处理这些集合,并且希望使用仅使用ArrayLists的方法,如果可能。

/*
Code that creates the NewArrayList ArrayList and fills it 
with elements identical to that of the input ArrayList
*/



for(int i=0; i<input.size(); ++i) {
   String currentWord = input.get(i);
   for(int j=i+1; j<input.size(); ++j) {
      String wordToCompare = input.get(j);

      if(currentWord.equalsIgnoreCase(wordToCompare)) {
         currentWord = wordToCompare;
         newArrayList.set(i, wordToCompare);
         newArrayList.set(j, "REMOVE_THIS_STRING");
      }
   }
}



/*
Code that goes through NewArrayList and removes 
all Strings set to "REMOVE_THIS_STRING"
*/

如果ArrayList输入为"interface", "list", "Primitive", "class", "primitive", "List", "Interface", "lIst", "Primitive",则预期输出为"Interface", "lIst", "Primitive", "class",但我得到的是"Interface", "lIst", "Primitive", "class", "Primitive", "lIst"

2 个答案:

答案 0 :(得分:1)

要删除重复项,可以使用Java 8 Key3,如下所示:

stream.distict()

这是区分大小写的,因此您必须先映射为小写。

要大写每个结果不同单词的首字母,您需要添加:

List<Integer> newArrayList= input.stream() .map(String::toLowerCase) .distinct() .collect(Collectors.toList()); }

在流处理中。它将是:

.map(name -> name.substring(0, 1).toUpperCase() + name.substring(1))

答案 1 :(得分:1)

这会更改保留值的相对顺序,但这不是必需的。

  List<String> input = new ArrayList<>(List.of("interface",
        "list",
        "Primitive",
        "class",
        "primitive",
        "List",
        "Interface",
        "lIst",
        "Primitive"));

  for (int k = 0; k < input.size(); k++) {
     String word = input.get(k);
     // remove them all
     for (int i = 0; i < input.size(); i++) {
        if (input.get(i).equalsIgnoreCase(word)) {
           word = input.remove(i);
        }
     }

     //add in the last one removed.
     input.add(0, word);
  }

  System.out.println(input);