对于分配,我必须创建一个方法,该方法接受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"
答案 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);