package com.test.sample;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class StreamTest {
final static int FETCH_MAX_SIZE = 2;
public static void main (String[] args) {
List<Map<String, Object>> prdList = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> prdList2 = new ArrayList<Map<String, Object>>();
for (int i=0; i < 10; i++) {
Map<String, Object> product = new HashMap<>();
product.put("prdNo", i + 1000);
product.put("ordQty", i + 30);
if (i%2 == 0) {
product.put("useYn", "N");
}
else {
product.put("useYn", "Y");
}
prdList.add(product);
}
System.out.printf("\n\n");
System.out.printf("prdList:" + prdList);
prdList2 =
prdList.stream().filter(distinctByPrdNo(m -> m.get("prdNo")))
.filter(t->t.get("useYn").equals("Y"))
.limit(FETCH_MAX_SIZE).collect(Collectors.toList());
System.out.printf("\n\n");
System.out.printf("prdList:" + prdList);
System.out.printf("\n\n");
System.out.printf("prdList2:" + prdList2);
}
private static <T> Predicate<T> distinctByPrdNo(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
}