// Collectors的方法
public class Lambda2 {
public static List<Integer> createListByInteger() {
List<Integer> list = Lists.newArrayList(1, 2, 32, 3, 4, 5, 6, 7, 3, 7, 10, 11, 4);
return list;
}
public static List<String> createListByString() {
List<String> list = Lists.newArrayList("1", "2", "32", "3", "4", "5", "6", "7", "8", "9", "10", "11", "0");
return list;
}
public static List<String> createListByCharacter() {
List<String> list = Lists.newArrayList("a", "d", "a", "c", "f", "e", "t", "l");
return list;
}
public static List<Product> createProduct() {
List<Product> list = new ArrayList<Product>();
String str = "[\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"鲜淮山炒黑木耳\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":28,\n" +
" \"classify_name\":\"每日抢购\",\n" +
" \"classify_id\":\"1323454502753538048\",\n" +
" \"goods_id\":\"1317807825745088512\",\n" +
" \"goods_discount\":0\n" +
" },\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"玉米松子\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":35,\n" +
" \"classify_name\":\"每日抢购\",\n" +
" \"classify_id\":\"1323454502753538048\",\n" +
" \"goods_id\":\"1317807947237298176\",\n" +
" \"goods_discount\":0\n" +
" },\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"腊八豆蒸排骨\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":18,\n" +
" \"classify_name\":\"每日抢购\",\n" +
" \"classify_id\":\"1323454502753538048\",\n" +
" \"goods_id\":\"1317807639778037760\",\n" +
" \"goods_discount\":0\n" +
" },\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"蒜蓉粉丝蒸娃娃菜\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":28,\n" +
" \"classify_name\":\"优先新品\",\n" +
" \"classify_id\":\"1323454357907443712\",\n" +
" \"goods_id\":\"1317807566960726016\",\n" +
" \"goods_discount\":0\n" +
" },\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"湘水肉沫蒸蛋\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":33,\n" +
" \"classify_name\":\"优先新品\",\n" +
" \"classify_id\":\"1323454357907443712\",\n" +
" \"goods_id\":\"1317807434039037952\",\n" +
" \"goods_discount\":0\n" +
" },\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"紫苏土豆牛肉碎\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":70,\n" +
" \"classify_name\":\"优先新品\",\n" +
" \"classify_id\":\"1323454357907443712\",\n" +
" \"goods_id\":\"1317807129075388416\",\n" +
" \"goods_discount\":0\n" +
" },\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"青豆炒肉泥\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":58,\n" +
" \"classify_name\":\"优先新品\",\n" +
" \"classify_id\":\"1323454357907443712\",\n" +
" \"goods_id\":\"1317806865106866176\",\n" +
" \"goods_discount\":0\n" +
" },\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"吮指青尾鱼\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":128,\n" +
" \"classify_name\":\"热销商品\",\n" +
" \"classify_id\":\"1323454099097915392\",\n" +
" \"goods_id\":\"1317805910818820096\",\n" +
" \"goods_discount\":0\n" +
" },\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"香爆酱牛肉\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":88,\n" +
" \"classify_name\":\"热销商品\",\n" +
" \"classify_id\":\"1323454099097915392\",\n" +
" \"goods_id\":\"1317805307065536512\",\n" +
" \"goods_discount\":0\n" +
" },\n" +
" {\n" +
" \"goods_status\":\"正常\",\n" +
" \"goods_name\":\"清远鸡\",\n" +
" \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
" \"classify_status\":\"正常\",\n" +
" \"goods_price\":98,\n" +
" \"classify_name\":\"热销商品\",\n" +
" \"classify_id\":\"1323454099097915392\",\n" +
" \"goods_id\":\"1317804058198937600\",\n" +
" \"goods_discount\":0\n" +
" }\n" +
"]";
JSONArray productArray = JSONArray.parseArray(str);
for (int i = 0; i < productArray.size(); i++) {
Product product = new Product();
JSONObject productJson = productArray.getJSONObject(i);
product = JSON.parseObject(productJson.toJSONString(), Product.class);
list.add(product);
}
return list;
}
public static void collectors() {
// toCollection 方法返回一个收集器 输入元素到一个新的集合中
List<Integer> list = createListByInteger();
Collection<Integer> collection = list.parallelStream().collect(Collectors.toCollection(ArrayList::new));
System.out.println(collection);
System.out.println("###########################################");
Collection<Integer> collection1 = list.parallelStream().collect(Collectors.toCollection(HashSet::new));
System.out.println(collection1);
System.out.println("*******************************************");
// toList() 返回一个收集器把数据收集到一个新的list 中
List<String> list1 = createListByCharacter();
List<String> list2 = list1.parallelStream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println(list2);
System.out.println("###########################################");
// toSet()
Set<String> list3 = list1.parallelStream().map(String::toUpperCase).collect(Collectors.toSet());
System.out.println(list3);
System.out.println("*******************************************");
// toMap() Function.identity() 类似于 item -> item
Map<String, String> map = list1.parallelStream().collect(Collectors.toMap(Function.identity(), String::toUpperCase, (k1, k2) -> k1));
Map<String, String> map1 = list1.parallelStream().collect(Collectors.toMap(item -> item.toUpperCase(), String::toUpperCase, (k1, k2) -> k1));
System.out.println(map);
System.out.println("###########################################");
System.out.println(map1);
System.out.println("*******************************************");
// joining 连接字符串
String concat = Stream.of("a", "b").collect(Collectors.joining());
System.out.println(concat);
System.out.println("###########################################");
String concat1 = Stream.of("a", "b").collect(Collectors.joining(","));
System.out.println(concat1);
System.out.println("###########################################");
String concat2 = Stream.of("a", "b").collect(Collectors.joining(",", "[", "]"));
System.out.println(concat2);
System.out.println("###########################################");
String concat3 = Stream.of("a", new StringBuilder("b"), new StringBuilder("c")).collect(Collectors.joining(","));
System.out.println(concat3);
System.out.println("*******************************************");
// mapping/flatMapping 它将Function应用于输入元素,然后将它们累积到给定的Collector
List<String> list4 = list1.parallelStream().collect(Collectors.mapping(String::toUpperCase, Collectors.toList()));
System.out.println(list4.toString());
System.out.println("###########################################");
Set<String> set = list1.parallelStream().collect(Collectors.mapping(Function.identity(), Collectors.toSet()));
System.out.println(set);
System.out.println("*******************************************");
// filter 设置过滤条件
List<String> list5 = list1.parallelStream().filter(item -> item.toUpperCase().contains("A")).collect((Collectors.toList()));
System.out.println(list5);
System.out.println("*******************************************");
// collectingAndThen
// count 计数
long count = list1.parallelStream().filter(item -> item.toUpperCase().contains("A")).count();
System.out.println(count);
System.out.println("*******************************************");
// minBy 根据给定的比较器返回最小的元素(Interger)
Optional<Integer> min = list.stream().collect(Collectors.minBy((x, y) -> x - y));
System.out.println(min);
System.out.println("*******************************************");
// maxBy 它根据给定的比较器返回最大元素
Optional<Integer> max = list.stream().collect(Collectors.maxBy((x, y) -> x - y));
System.out.println(max);
System.out.println("*******************************************");
// 求数据的总和
Integer sum1 = list.stream().collect(Collectors.summingInt(Integer::intValue));
Integer sum2 = list.stream().collect(Collectors.summingInt(item -> item));
System.out.println(sum1);
System.out.println(sum2);
System.out.println("*******************************************");
// 求数据的平均数
Double avg = list.stream().collect(Collectors.averagingDouble(Integer::intValue));
System.out.println(avg);
System.out.println("*******************************************");
// 分组 groupingBy
List<Product> productList = createProduct();
Map<String, List<Product>> productMap = productList.parallelStream().collect(Collectors.groupingBy(Product::getClassify_name));
System.out.println(productMap);
System.out.println("###########################################");
// groupingByConcurrent 分组,是并发和无序的
Map<String, List<Product>> productMap1 = productList.parallelStream().collect(Collectors.groupingByConcurrent(Product::getClassify_name));
System.out.println(productMap);
System.out.println("*******************************************");
// partitioningBy 返回一个Collector,它根据Predicate对输入元素进行分区,并将它们组织成Map <Boolean,List>
Map<Boolean, List<Integer>> map2 = list.stream().collect(Collectors.partitioningBy(item -> item % 2 == 0));
System.out.println(map2);
System.out.println("*******************************************");
// BinaryOperator 返回一个收集器,它在指定的BinaryOperator下执行其输入元素的减少。 类似于having操作
// 这主要用于多级缩减,例如使用groupingBy()和partitioningBy()方法指定下游收集器
// Collectors.reducing 定制归一化收集器(reducing)得到自定义结果集
Map<Boolean, Optional<Integer>> map3 = list.stream().collect(Collectors.partitioningBy(item -> item % 2 == 0, Collectors.reducing(BinaryOperator.maxBy(Comparator.comparing(Integer::intValue)))));
System.out.println(map3);
System.out.println("*******************************************");
// summarizingInt 返回统计数据:min, max, average, count, sum
IntSummaryStatistics intSummaryStatistics = list.stream().collect(Collectors.summarizingInt(Integer::intValue));
System.out.println(intSummaryStatistics);
}
public static void main(String[] args) {
collectors();
}
}
欢迎关注我的微信公众号,更多内容将在微信公众号中发布: