Проверьте этот код ниже.
Идея состоит в том, чтобы создать карту количества строк. Если элемент встречался один раз, добавьте его непосредственно в список исключенных дубликатов. Если это произошло более одного раза, вам необходимо проверить, какую версию элемента вы хотите сохранить (строчные или прописные).
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.stream.Collectors;
public class RemoveDuplicateCaseInsensitive {
public static void main(String[] args) {
List<String> inputList = Arrays.asList("a", "A", "b", "B", "C", "D", "d", "E");
Scanner scanner = new Scanner(System.in);
String caseToRemove = scanner.nextLine();
System.out.println("caseToRemove is = " + caseToRemove); // to be inputted by user
Map<String, Long> countMapOfString =
inputList.stream().collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting()));
System.out.println("countMapOfString is = " + countMapOfString);
List<String> deDuplicatedStringList = new ArrayList<>();
inputList.stream().forEach(element -> {
// element which have occurred only once should be added straight away
if (countMapOfString.get(element.toLowerCase()) == 1) {
deDuplicatedStringList.add(element);
} else {
if (caseToRemove.equalsIgnoreCase("UpperCase")) { // want to remove uppercase
if (!deDuplicatedStringList.contains(element.toLowerCase())) {
deDuplicatedStringList.add(element.toLowerCase());
}
} else if (caseToRemove.equalsIgnoreCase("LowerCase")) { // want to remove lowercase
if (!deDuplicatedStringList.contains(element.toUpperCase())) {
deDuplicatedStringList.add(element.toUpperCase());
}
}
}
});
System.out.println("deDuplicatedStringList is = " + deDuplicatedStringList);
}
}
Когда вы запускаете с LowerCase
в качестве входных данных, вывод программа:
caseToRemove is = LowerCase
countMapOfString is = {a=2, b=2, c=1, d=2, e=1}
deDuplicatedStringList is = [A, B, C, D, E]
Когда вы запускаете UpperCase
в качестве входных данных, вывод программы будет
caseToRemove is = UpperCase
countMapOfString is = {a=2, b=2, c=1, d=2, e=1}
deDuplicatedStringList is = [a, b, C, d, E]
Надеюсь, это поможет.