Java8 - sum求和,将 List 集合转为 Map,key去重(groupingBy),sorted排序
Java8 - sum求和,将 List 集合转为 Map,key去重(groupingBy),sorted排序
package com.example.core.mydemo.java8;
public class GoodsPriceDTO {
private Integer id;
private String goodName;
private Integer amount;
//重写toString方法,System可以打印输出对象
@Override
public String toString() {
return "GoodsPriceDTO{" +
"id=" + id +
", goodName='" + goodName + '\'' +
", amount=" + amount +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGoodName() {
return goodName;
}
public void setGoodName(String goodName) {
this.goodName = goodName;
}
public Integer getAmount() {
return amount;
}
public void setAmount(Integer amount) {
this.amount = amount;
}
}
package com.example.core.mydemo.java8; import java.util.*;
import java.util.stream.Collectors; public class GoodsTotalTest {
public static void main(String[] args) {
List<GoodsPriceDTO> goodsPriceDTOS = new ArrayList<GoodsPriceDTO>();
GoodsPriceDTO dto = new GoodsPriceDTO();
dto.setId(1);
dto.setGoodName("Apple1");
dto.setAmount(27);
goodsPriceDTOS.add(dto); GoodsPriceDTO dto2 = new GoodsPriceDTO();
dto2.setId(2);
dto2.setGoodName("Orange");
dto2.setAmount(28);
goodsPriceDTOS.add(dto2); GoodsPriceDTO dto3 = new GoodsPriceDTO();
dto3.setId(3);
dto3.setGoodName("Banana");
dto3.setAmount(29);
goodsPriceDTOS.add(dto3); GoodsPriceDTO dto4 = new GoodsPriceDTO();
dto4.setId(4);
dto4.setGoodName("Apple4");
dto4.setAmount(23);
goodsPriceDTOS.add(dto4); //重复键key
GoodsPriceDTO dto5 = new GoodsPriceDTO();
dto5.setId(4);
dto5.setGoodName("Apple5");
dto5.setAmount(100);
goodsPriceDTOS.add(dto5); int amt = Optional.ofNullable(goodsPriceDTOS)
.orElseGet(ArrayList::new)
.stream()
.filter(x -> x != null && ("Apple".equals(x.getGoodName()))).mapToInt(GoodsPriceDTO::getAmount).sum();
System.out.println("amt=" + amt); //Java8 - 将 List 集合转为 Map
//List转map
Map<Integer,GoodsPriceDTO> map = Optional.ofNullable(goodsPriceDTOS)
.orElseGet(ArrayList::new)
.stream().collect(Collectors.toMap(GoodsPriceDTO::getId,GoodsPriceDTO->GoodsPriceDTO,(oldValue,newValue)->oldValue));
System.out.println("map=" + map); //List转map -2
Map<Integer,String> map2 = Optional.ofNullable(goodsPriceDTOS)
.orElseGet(ArrayList::new)
.stream().collect(Collectors.toMap(GoodsPriceDTO::getId,GoodsPriceDTO::getGoodName,(oldValue,newValue)->oldValue));
System.out.println("map2=" + map2); //如果出现相同的key,那么会抛出重复key的异常
//Duplicate key com.example.core.mydemo.java8.GoodsPriceDTO@20ad9418
//输出: map2={1=Apple1, 2=Orange, 3=Banana, 4=Apple4} //刚才上面出现重复的ID,是根据值进行覆盖,在某些情况下需要映射成列表。即:List -> Map<Integer, List>的情况。
Map<Integer,List<GoodsPriceDTO>> map3 = Optional.ofNullable(goodsPriceDTOS)
.orElseGet(ArrayList::new)
.stream().collect(Collectors.groupingBy(GoodsPriceDTO::getId));
System.out.println("map3=" + map3);
//map3={1=[GoodsPriceDTO{id=1, goodName='Apple1', amount=27}], 2=[GoodsPriceDTO{id=2, goodName='Orange', amount=28}], 3=[GoodsPriceDTO{id=3, goodName='Banana', amount=29}], 4=[GoodsPriceDTO{id=4, goodName='Apple4', amount=23}, GoodsPriceDTO{id=4, goodName='Apple5', amount=100}]} //Comparator 升序
List<GoodsPriceDTO> newSortedList = Optional.ofNullable(goodsPriceDTOS)
.orElseGet(ArrayList::new)
.stream().sorted(Comparator.comparing(GoodsPriceDTO::getAmount)).collect(Collectors.toList()); //按价格排序:
newSortedList.stream().forEach(x -> {
System.out.println("x=" + x);
}); //Comparator 降序
List<GoodsPriceDTO> newSortedList1 = Optional.ofNullable(goodsPriceDTOS)
.orElseGet(ArrayList::new)
.stream().sorted(new Comparator<GoodsPriceDTO>() {
@Override
public int compare(GoodsPriceDTO o1, GoodsPriceDTO o2) {
return o2.getAmount().compareTo(o1.getAmount());
}
}).collect(Collectors.toList()); //按价格排序:
newSortedList1.stream().forEach(x -> {
System.out.println("x1=" + x);
}); //升序
List<GoodsPriceDTO> newSortedList2 = Optional.ofNullable(goodsPriceDTOS)
.orElseGet(ArrayList::new)
.stream().sorted((a,b) ->(a.getAmount() - b.getAmount())).collect(Collectors.toList()); //按价格排序:
newSortedList2.stream().forEach(x -> {
System.out.println("x2=" + x);
}); //降序
List<GoodsPriceDTO> newSortedList3 = Optional.ofNullable(goodsPriceDTOS)
.orElseGet(ArrayList::new)
.stream().sorted((a,b) ->(b.getAmount() - a.getAmount())).collect(Collectors.toList()); //按价格排序:
newSortedList3.stream().forEach(x -> {
System.out.println("x3=" + x);
}); }
}
Java8 - sum求和,将 List 集合转为 Map,key去重(groupingBy),sorted排序的更多相关文章
- java8--List转为Map、分组、过滤、求和等操作----代码示例
Java 8 函数式编程风格 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.他们说会影 ...
- json数据转为Map集合
我是利用Gson来弄得Gson gson = new Gson();//显得出HashMap的类型Type type = new TypeToken<HashMap<String, Str ...
- XML字符串转为Map集合
public class xmlToMapUtils { /** * xml字符串转为map集合 * @param xmlStr * @return */ public static Map<S ...
- 【转载】 C#中使用Sum方法对List集合进行求和操作
在C#的List操作中,有时候我们需要对List集合对象的某个属性进行求和操作,此时可以使用Lambda表达式中的Sum方法来快速实现此求和操作,使用Sum方法可使代码简洁易读,并且省去写for循环或 ...
- Json数组形式的字符串转为Map数组、Map集合的几种遍历方式
// Json数组形式的字符串转为Map数组 String strArr = "[{"name": "xx", "age": &q ...
- Java8将List转为Map
1.实体 public class Hosting { private int id; private String name; private long websites; public Hosti ...
- Java 8中Collection转为Map的方法
Java 8中java.util.stream.Collectors提供了几个方法可用于把Collection转为Map结构,本文记录了个人对其中三个的理解. Method Return Type g ...
- Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】
Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...
- java集合 之 Map集合
Map用于保存具有映射关系的数据,具有两组值:一组用于保存Map中的key:另一组用于保存Map中的value,形成key-value的存储形式. Map集合中包含的一些方法: void clear( ...
- Java集合之Map
Map架构: 如上图: (1)Map是映射接口,Map中存储的内容是键值对(key-value) (2)AbstractMap是继承于Map的抽象类,实现了Map中的大部分API. (3)Sorted ...
随机推荐
- Flink 在顺丰的应用实践
简介: 顺丰基于 Flink 建设实时数仓的思路,引入 Hudi On Flink 加速数仓宽表,以及实时数仓平台化建设的实践. 本⽂由社区志愿者苗文婷整理,内容源⾃顺丰科技大数据平台研发工程师龙逸 ...
- 修复 WPF 安装 WindowsAppSDK 库构建失败 NETSDK1082 和 NETSDK1112 找不到 win10-arm 失败
通过在 WPF 项目上安装 WindowsAppSDK 库,可以让 WPF 使用上 Win10 及以上版本提供的 Windows Runtime 强大的 API 集和使用上更多的黑科技.本文记录在安装 ...
- dotnet 性能优化 利用哈希思想优化大对象集合相等判断性能
利用哈希的其中一个思想,相同的对象的哈希值相同,可以用来提升一些大对象集合的进行对象相等判断的性能.大对象的相等判断指的是有某些类型的相等判断需要用到对象的很多属性或字段进行参与判断逻辑才能判断两个对 ...
- 阿里云OSS文件上传几种方法(主要是前端)
目录 零.准备 一.服务端签名后直传 1. 阿里云控制台配置 2. 后端接口开发(PHP) 3. 前端获取签名后上传 二.使用STS临时凭证进行上传 1. 后端接口开发(node) 2. 前端获取临时 ...
- 开发日记:中控PUSH协议
using System; using System.IO; using System.Net; using System.Text.RegularExpressions; namespace Con ...
- C语言结构体的内存分配
一.结构体内存分配原则 原则一:结构体中元素按照定义顺序存放到内存中,但并不是紧密排列.从结构体存储的首地址开始 ,每一个元素存入内存中时,它都会认为内存是以自己的宽度来划分空间的,因此元素存放的位置 ...
- VUE+element页面按钮调用dialog
VUE+element通过按钮调用普通弹框(弹框页面独立出一个dialog页面,非在同一个页面文件里) 代码如下 <el-dialog> <el-button type=" ...
- hexo 博客插入本地图片时遇到的坑
哈喽大家好,我是咸鱼. 最近一直在折腾博客的事,说是 hexo 极易上手,我觉得只仅限于在安装部署的时候,随着对 hexo 的深入使用,发现遇到的问题还是挺多的. 那今天来讲一下我在把本地图片插入到 ...
- JavaScript 数组常用方法整理
数组变异方法 push() 数组末尾添加一个项目,返回新数组长度,arr.push(item)pop() 数组末尾删除一个元素,返回被删除元素,arr.pop()shift() 删除数组开头第1个元素 ...
- d3d12龙书阅读----绘制几何体(下)
d3d12龙书阅读----绘制几何体(下) 本节在上一节的基础上,对整个绘制过程进行优化,将绘制单个几何体的内容拓展到了多个几何体,同时对根签名进行了进一步地探索. 帧资源 在之前绘制每帧的结尾,我们 ...