package ---;

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors; /**
* Created by zhugenqi on 2018/9/18 0018.
*/
class ListToMap {
private static List<Apple> appleList = new ArrayList<>();//存放apple对象集合; public static void main(String[] args) throws Exception {
Apple apple1 = new Apple(1, "苹果1", new BigDecimal("3.25"), 10);
Apple apple12 = new Apple(1, "苹果2", new BigDecimal("1.35"), 20);
Apple apple13 = new Apple(2, "苹果13", new BigDecimal("1.35"), 20);
Apple apple2 = new Apple(2, "香蕉", new BigDecimal("2.89"), 30);
Apple apple3 = new Apple(3, "荔枝", new BigDecimal("9.99"), 40);
appleList.add(apple1);
appleList.add(apple12);
appleList.add(apple13);
appleList.add(apple2);
appleList.add(apple3);
toMap(appleList);
} private static void toMap(List<Apple> appleList) throws Exception {
//转化为map,并且对 key 去重
Map<Integer, Apple> AppleMap = appleList.stream()
.collect(Collectors
.toMap(Apple::getId, apple -> apple, (k1, k2) -> k1)
);
//根据分组
Map<Integer, List<Apple>> AppleMap02 = appleList.stream().collect(Collectors.groupingBy(Apple::getId)); //筛选出name为香蕉的code
List<Apple> AppleMap03 = appleList.stream().filter(apple -> apple.getName().equals("香蕉")).collect(Collectors.toList()); //分组求和
BigDecimal TotalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal sum = appleList.stream().filter(apple -> apple.getName().equals("香蕉")).map(Apple::getMoney).reduce(BigDecimal.ZERO,BigDecimal::add); //算出name的种类数量,并转为set
Set<String> names = appleList.stream().map(Apple::getName).collect(Collectors.toSet());
System.out.println("主键去从");
System.out.println(AppleMap);
System.out.println("分组");
for (Map.Entry entry : AppleMap02.entrySet()) {
System.out.print(entry.getKey() + " ");
List list = (List) entry.getValue();
for (Object object : list) {
if (list.indexOf(object) > 0) {
System.out.print(" ");
}
System.out.println(object);
}
}
System.out.println("过滤");
System.out.println(AppleMap03); System.out.println("求和");
System.out.println("总价格 :" + TotalMoney); System.out.println("分组求和");
System.out.println("总数量 : " + sum); System.out.println("输出种类");
System.out.println("种类 : "+names);
}
}

List的分组,求和,过滤操作的更多相关文章

  1. oracel sql分组求和过滤条件

  2. LINQ简明教程:数据排序、分组、过滤

    LINQ可以对很多数据源进行查询操作,比如数据库.数组(array).链表(list).XML文件等.在本文中,我将从数组中提取数据,这些数据是10个最受欢迎的国家.有一个类叫Countries,有c ...

  3. Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...

  4. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

  5. MySQL单表查询(分组-筛选-过滤-去重-排序)

    目录 一:单表查询 1.单表查询(前期准备) 2.插入记录(写入数据) 3.查询关键字 二:查询关键字之where 1.查询id大于等于3小于等于6的数据 2.查询薪资是20000或者18000或者1 ...

  6. Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...

  7. 如何对Backbone.Collection进行过滤操作

    首先我想说的是这篇文章的题目起的很怪,因为我不知道起个什么名字比较好.渲染列表是我们应用中最常见的操作了吧,在运用Backbone的应用中,我们一般会把列表作为一个Collcetion,然后指定一个V ...

  8. Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

    原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...

  9. linq分组求和_实体类和datatable

    1.数据分组求合,分别用的实体类以及datatable来分组求合,还有分组求和之后的如何取值 //实体类版本 List<ProgramTimeModel> TotalAllList = G ...

随机推荐

  1. 早上一起来,就看到朋友圈发这个,慌的一 B

    早上一起来,就看到朋友圈发这个,慌的一 B,也不知道是真是假- 图中的 c 表示已被确认,大家可以看到各个大厂真的是在大幅度裁员. 不知道明年的情况会如何,网上看到过一句话:2019 年也许是这 10 ...

  2. Python面试知识点小结

    一.Python基础 1.Python语言特性: 动态型(运行期确定类型,静态型是编译型确定类型),强类型(不发生隐式转换,弱类型,如PHP,JavaScript就会发生隐患式转换) 2.Python ...

  3. Python之路1-变量、数据类型、循环语法

    1.python语言介绍 编程语言主要从以下几个角度进行分类,编译型和解释型,静态语言和动态语言,强类型定义语言和弱类型定义语言. 编译和解释区别 编译器是把源程序的每一条语句都编译成机器语言,并保存 ...

  4. LODOP超文本简短问答和相关内容

    html样式查看lodop内部解析的html信息,见http://www.c-lodop.com/faq/pp8.html分析差异点,因浏览器版本不同遵循的html标准不同,造成某些标签属性显示有差异 ...

  5. python 装饰器练习题

    1.写出完整的装饰器(不用开了带参装饰器,就是普通装饰器)语法 2.有一个计算两个数和的方法,为其添加一个确保两个参数都是int或float类型的装饰器,保证运算不会抛异常 3.有一个一次性录入人名并 ...

  6. docker基础维护命令

    docker images显示当前存在的images docker ps,显示当前的container docker rm containerId 删除指定的container(需要先停止,才能删除) ...

  7. placeholder效果

    <!DOCTYPE HTML> <html lang="en-US"> <head>     <meta charset="UT ...

  8. 清明培训 清北学堂 DAY1

    今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1)   高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...

  9. 天气预测(CNN)

    import torch import torch.nn as nn import torch.utils.data as Data import numpy as np import pymysql ...

  10. 修改帝国cms栏目后,如何更新

    修改栏目后,要依次做如下更新: 1.    2.  3.    如果只是修改了栏目里的属性,只需要做第三步就行了