Extra requirements from comments:
Sorted
If sorting the values is ok, handling case-sensitive is easiest done using a TreeSet
with a case-insensitive Comparator
, like the String.CASE_INSENSITIVE_ORDER
, or by using a Collator
for full language support.
static String toString(List<String> list, boolean unique) {
Collection<String> dataToProcess = list;
if (unique) {
dataToProcess = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
dataToProcess.addAll(list);
}
StringBuilder result = new StringBuilder();
String delimiter= "";
for (String s : dataToProcess) {
result.append(delimiter).append(s);
delimiter = ",";
}
return result.toString();
}
Test
List<String> list = Arrays.asList("option1", "option3", "OPTION1", "OPTION2", "option4", "option2");
System.out.println(toString(list, false));
System.out.println(toString(list, true));
Output
option1,option3,OPTION1,OPTION2,option4,option2
option1,OPTION2,option3,option4
Notice how the "unique" result is sorted, but the non-unique result is not.
Using Collator
For better language support, use a Collator
:
if (unique) {
Collator collator = Collator.getInstance(/*Locale.GERMANY*/);
collator.setStrength(Collator.SECONDARY);
dataToProcess = new TreeSet<>(collator);
dataToProcess.addAll(list);
}
Unsorted
To do it without sorting the values, we'll keep using the TreeSet
but build a new list.
if (unique) {
Collator collator = Collator.getInstance(/*Locale.GERMANY*/);
collator.setStrength(Collator.SECONDARY);
Set<String> set = new TreeSet<>(collator);
dataToProcess = new ArrayList<>();
for (String s : list)
if (set.add(s))
dataToProcess.add(s);
}
Output
option1,option3,OPTION1,OPTION2,option4,option2
option1,option3,OPTION2,option4