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. WPF 字体 FontStyle 的 Italic 和 Oblique 的区别

    本文介绍在 WPF 里面的字体属性 FontStyle 的 Italic 和 Oblique 的斜体差别 本文的图片和知识来自: #265 – Specifying Values for FontSt ...

  2. MSIL 静态类在 IL 定义上和非静态类的差别

    本文来聊聊 MSIL 的基础知识,给一个 C# 的类标记了 static 之后和标记 static 之前,生成这个类的 IL 代码有什么不同 如以下的代码是一个默认的控制台程序 class Progr ...

  3. dotnet OpenXML 读取形状轮廓线条样式序号超过主题样式列表数

    在 OpenXML 中,默认的形状可以通过指定 LineReference 让形状使用文档主题里面的样式.文档主题里面包含多个样式,在形状里面指定样式通过的是序号的方法,如果在形状里面指定的序号超过了 ...

  4. C# 采集知网

    采集知网 WebClient /// <summary> /// 支持 Session 和 Cookie 的 WebClient. /// </summary> public ...

  5. ESP32 + IDF + LED

    一.开发板 ESP32-S3-DevKitC-1 管脚布局 由于这个程序控制比较简单,就不赘述了,直接看程序. 二.程序 #include "freertos/FreeRTOS.h" ...

  6. 【爬虫GUI】YouTube评论采集软件,突破反爬,可无限爬取!

    目录 一.背景介绍 1.1 软件说明 1.2 效果演示 二.科普知识 2.1 关于视频id 2.2 关于评论时间 三.爬虫代码 3.1 界面模块 3.2 爬虫模块 3.3 日志模块 四.获取源码及软件 ...

  7. 简说Python之数字和变量

    目录 Python的运算 Python关于进制的一些描述 十六进制的显示 八进制和二进制的显示 转成二进制,八进制,十六进制的方法 二,八,十六进制转回十进制的方法 Python变量 数字类型 浮点数 ...

  8. laravel-cms学习笔记

    学习地址: https://www.houdunren.com/edu/video/12045 laravel 文档地址: https://gitee.com/houdunren/code/blob/ ...

  9. 如何将 Win10 企业版转换为专业版

    有时候,我们需要将 Windows 10 企业版转换为专业版.这种情况可能发生在您购买了预装企业版的电脑,但实际上只需要专业版的功能.本文将介绍如何简单地将 Windows 10 企业版转换为专业版. ...

  10. three.js介绍和学习资料说明

    1.three.js能做什么 Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多.使用最广泛的三维引擎.既然Threejs是一款WebGL ...