Here is the SQL version for the input and output :
with tab1 as ( select 1 as id from dual union all select 1 as id from dual union all select 2 as id from dual union all select 2 as id from dual union all select 5 as id from dual ) select id from tab1 group by id having count(id)=1; Output is Id=5 and count is 1
As 5 is non repeated.How do i implement it using JAVA 8 streams?
I tried below but obviously it is giving wrong result
List<Integer> myList = new ArrayList<Integer>(); myList.add(1); myList.add(1); myList.add(2); myList.add(2); myList.add(5); Long f = myList.stream() .distinct().count(); System.out.println(f);
long result = myList.stream() .collect(Collectors.groupingBy( Function.identity(), Collectors.counting())) .entrySet() .stream() .filter(entry -> entry.getValue() == 1) .map(Entry::getKey) .count();
Well you collect all the elements to a
Map<Integer, Long>, where the key is the value itself, and value is how many times it is repeated. Later we stream the entry set from that resulting map and
filter only those entries that that have a count of
1 (meaning they are not repeated), later we
Entry::getKey - to get that value from the List and count.