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 ...
随机推荐
- [FAQ] Quasar BEX Bridge 通信方式 this.$q.bex 未定义的问题
Bridge 是一个基于 Promise 的事件系统,在BEX的所有部分之间共享,允许在你的Quasar App中监听事件,从其它部分发出它们. 你可以使用 $q.bex 从你的 Quasar A ...
- dotnet C# 基于 INotifyPropertyChanged 实现一个 CLR 属性绑定辅助类
习惯了 WPF 或 UWP 等的依赖属性的绑定机制之后,我在写 CLR 属性时,有时也期望将两个 CLR 属性给绑定到一起.在 dotnet 里,提供了 System.ComponentModel.I ...
- dotnet 6 精细控制 HttpClient 网络请求超时
本文告诉大家如何在 dotnet 6 下使用 HttpClient 更加精细的控制网络请求的超时,实现 HttpWebRequest 的 ReadWriteTimeout 功能 本文将介绍如何在 Ht ...
- sendmail发送慢的问题
1.使用python的脚本,发送邮件.代码如下: 点击查看代码 [root@ZabbixServerMasterNode ~]# cd /etc/zabbix/alertscripts/ [root@ ...
- centos 7 开启 httpd 服务和 80 端口
centos 7 开启 httpd 服务和 80 端口 yum install -y httpd systemctl start httpd firewall-cmd --add-service=ht ...
- 1、Linux基础
1.centos 安装 2.磁盘分区表示方法 1.2.3.4:主分区,最多4个主分区,后数据为逻辑分区 主分区可以激活,但一个硬盘只能激活一个主分区 被激活的主分区就是用来引导操作系统的主分区 扩展分 ...
- 使用 Docker 部署 TaleBook 私人书籍管理系统
1)项目介绍 GitHub:https://github.com/talebook/talebook Talebook 是一个简洁但强大的私人书籍管理系统.它基于 Calibre 项目构建,具备书籍管 ...
- es请求方式调用
Es基础 关系: ElasticSearch-> mysql index (索引)-> 数据库 Documents(文档) -> row(行) Fileds(字段)-> col ...
- next-route
在目录结构中,我们精心创建的每一个文件最终都会经过处理,转化为相应的页面路由.然而,值得注意的是,某些特殊文件格式在生成过程中并不会被当作路由路径来处理. app |-auth login page. ...
- js与jquery实例-拖动改变列宽和行高
js与jquery实例-拖动改变列宽和行高 如何通过javascript或者jquery实现改变表格宽度或者行高的功能?今天就把这个功能代码分享给大家,绝对原创哦,代码少而且易懂.先看效果图: htm ...