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排序的更多相关文章

  1. java8--List转为Map、分组、过滤、求和等操作----代码示例

    Java 8 函数式编程风格 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.他们说会影 ...

  2. json数据转为Map集合

    我是利用Gson来弄得Gson gson = new Gson();//显得出HashMap的类型Type type = new TypeToken<HashMap<String, Str ...

  3. XML字符串转为Map集合

    public class xmlToMapUtils { /** * xml字符串转为map集合 * @param xmlStr * @return */ public static Map<S ...

  4. 【转载】 C#中使用Sum方法对List集合进行求和操作

    在C#的List操作中,有时候我们需要对List集合对象的某个属性进行求和操作,此时可以使用Lambda表达式中的Sum方法来快速实现此求和操作,使用Sum方法可使代码简洁易读,并且省去写for循环或 ...

  5. Json数组形式的字符串转为Map数组、Map集合的几种遍历方式

    // Json数组形式的字符串转为Map数组 String strArr = "[{"name": "xx", "age": &q ...

  6. Java8将List转为Map

    1.实体 public class Hosting { private int id; private String name; private long websites; public Hosti ...

  7. Java 8中Collection转为Map的方法

    Java 8中java.util.stream.Collectors提供了几个方法可用于把Collection转为Map结构,本文记录了个人对其中三个的理解. Method Return Type g ...

  8. Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】

    Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...

  9. java集合 之 Map集合

    Map用于保存具有映射关系的数据,具有两组值:一组用于保存Map中的key:另一组用于保存Map中的value,形成key-value的存储形式. Map集合中包含的一些方法: void clear( ...

  10. Java集合之Map

    Map架构: 如上图: (1)Map是映射接口,Map中存储的内容是键值对(key-value) (2)AbstractMap是继承于Map的抽象类,实现了Map中的大部分API. (3)Sorted ...

随机推荐

  1. 如何专业化监控一个Kubernetes集群?

    简介: 本文会介绍 Kubernetes 可观测性系统的构建,以及基于阿里云云产品实现 Kubernetes 可观测系统构建的最佳实践. 作者:佳旭 阿里云容器服务技术专家 引言 Kubernetes ...

  2. 数据库误操作后悔药来了:AnalyticDB PostgreSQL教你实现分布式一致性备份恢复

    ​简介: 本文将介绍AnalyticDB PostgreSQL版备份恢复的原理与使用方法. 一.背景 AnalyticDB PostgreSQL版(简称ADB PG)是阿里云数据库团队基于Postgr ...

  3. [FAQ] 如何避免过度依赖百度, 甚至超越百度

    查找信息,你不依赖百度,势必要依赖其它. 那么如何超越百度搜索,也必须要站在巨人的肩膀上. 搜索市场已有不少巨头,最简单的超越办法是:站在所有巨人的肩膀上. Other:搜索的超越 Link:http ...

  4. WPF 解决 Skia 因为找不到字体而绘制不出中文字符

    在 WPF 使用 Skia 做渲染工具,如果绘制的中文都是方块,也许是字体的问题.字体的问题是 Skia 没有找到字体,本文告诉大家如何修复 在 Skia 使用特定字体,可以使用 SkiaSharp ...

  5. dotnet OpenXml SDK 形状填充渐变色的主题色

    在 Office 文档的一些有趣的设计,颜色和画刷是可以继承的,这个继承包括了属性的继承.在形状填充里面使用的渐变色是可以一部分属性放在主题里面,主要找到主题里面的画刷,替换掉形状自己定义的内容,才是 ...

  6. win10的开机启动文件夹

    1.在C:\Users(用户)\Administrator(当前用户名)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs(「开始」菜单)\P ...

  7. Elasticsdump 数据导入/导出

    目录 一.安装过程 安装NODE 通过npm安装elasticdump 二.数据导出 实操一 实操二 实操三 三.文件导入 一.安装过程 当前工具主要是用来对ES中的数据进行数据导入/导出,以及对数据 ...

  8. 基本base样式

    /* 去除常见标签默认的 margin 和 padding */ body, h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dt, dd, input { ma ...

  9. PCF 的 Npcf_PolicyAuthorization 服务化接口

    目录 文章目录 目录 引用 前文列表 术语 PCF Npcf_PolicyAuthorization 服务化操作类型 服务化接口参数类型 创建 Application Session Context: ...

  10. 4G LTE/EPC UE 的附着与去附着

    目录 文章目录 目录 UE 附着 UE 与 MME 建立 NAS 连接 UE 附着协议全景 UE 附着流程 UE 去附着 UE 侧发起的去附着 MME 发起的去附着 HSS 发起的去附着 UE 附着 ...