I have list with duplicate value ... I want a logic to return the non duplicate value

Hi All, I have list with duplicate value … I want a logic to return only c1 in Java/Groovy

List<String> windowsID = new ArrayList<>();

windowsID.add("a1");
windowsID.add("b1");
windowsID.add("c1");
windowsID.add("a1");
windowsID.add("b1");

@discover.selenium
You could use:
for (int cnt = 0; cnt < windowsID.size();cnt++)
{
if (windowsID.count(windowsID[cnt])==1)
{
WebUI.comment(windowsID[cnt].toString() + " has only one")
}
}

1 Like

This does not make sense to me. Do you want a collection without any duplication? Then you should use java.util.Set rather than java.util.List.

Set<String> windowsID = new HashSet<>();

windowsID.add("a1");
windowsID.add("b1");
windowsID.add("c1");
windowsID.add("a1");
windowsID.add("b1");

for (item in windowsID) {
    println item
}

this will give you:

b1
c1
a1

Duplications will be avoided.

1 Like

How about this?

import java.util.stream.Collectors

List<String> windowIDs = new ArrayList()
windowIDs.add("a1");
windowIDs.add("b1");
windowIDs.add("c1");
windowIDs.add("a1");
windowIDs.add("b1");

Set<String> distinct = new HashSet<>(windowIDs)

List<String> valuesThatAppearOnlyOnce =
	distinct.stream().filter { id ->
			Collections.frequency(windowIDs, id) == 1
		}.collect(Collectors.toList())

println valuesThatAppearOnlyOnce

This would show the following in the Console

[c1]
1 Like

Thanks :slightly_smiling_face:@grylion54 @kazurayam