汕头公众号建设网站,四川营销,网络营销运营策划,王者荣耀做网站利用java8新特性#xff0c;可以用简洁高效的代码来实现一些数据处理。1 数据准备1.1 定义1个Fruit对象package com.wkf.workrecord.work;import org.junit.Test;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;/*** author wuKeFan* date …利用java8新特性可以用简洁高效的代码来实现一些数据处理。1 数据准备1.1 定义1个Fruit对象package com.wkf.workrecord.work;import org.junit.Test;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;/*** author wuKeFan* date 2023-03-09 15:07:04*/
public class PublicTest {Testpublic void test() {ListFruit appleList new ArrayList();//存放apple对象集合Fruit apple1 new Fruit(1,苹果1,new BigDecimal(3.25),10);Fruit apple2 new Fruit(1,苹果2,new BigDecimal(1.35),20);Fruit banana new Fruit(2,香蕉,new BigDecimal(2.89),30);Fruit lychee new Fruit(3,荔枝,new BigDecimal(9.99),40);appleList.add(apple1);appleList.add(banana);appleList.add(apple2);appleList.add(lychee);}}
1.2 添加一些测试数据 ListFruit fruitList new ArrayList();//存放水果对象集合Fruit apple1 new Fruit(1,苹果1,new BigDecimal(3.25),10);Fruit apple2 new Fruit(1,苹果2,new BigDecimal(1.35),20);Fruit banana new Fruit(2,香蕉,new BigDecimal(2.89),30);Fruit lychee new Fruit(3,荔枝,new BigDecimal(9.99),40);fruitList.add(apple1);fruitList.add(banana);fruitList.add(apple2);fruitList.add(lychee);2 正文开始2.1 分组MapInteger, ListFruit groupBy fruitList.stream().collect(Collectors.groupingBy(Fruit::getId));
System.err.println(groupBy:groupBy);输出:groupBy:{1[Fruit(id1, name苹果1, money3.25, num10), Fruit(id1, name苹果2, money1.35, num20)], 2[Fruit(id2, name香蕉, money2.89, num30)], 3[Fruit(id3, name荔枝, money9.99, num40)]}2.2 List转Mapid为keyapple对象为value可以这么做/*** List - Map* 需要注意的是* toMap 如果集合对象有重复的key会报错Duplicate key ....* apple1,apple12的id都为1。* 可以用 (k1,k2)-k1 来设置如果有重复的key,则保留key1,舍弃key2*/
MapInteger, Fruit appleMap fruitList.stream().collect(Collectors.toMap(Fruit::getId, a - a,(k1,k2)-k1));
System.out.println(appleMap);输出:{1Fruit(id1, name苹果1, money3.25, num10), 2Fruit(id2, name香蕉, money2.89, num30), 3Fruit(id3, name荔枝, money9.99, num40)}2.3 过滤Filter从集合中过滤出来符合条件的元素//过滤出符合条件的数据
ListFruit filterList fruitList.stream().filter(a - a.getName().equals(香蕉)).collect(Collectors.toList());
System.err.println(filterList:filterList);输出:filterList:[Fruit(id2, name香蕉, money2.89, num30)]2.4 求和将集合中的数据按照某个属性求和://计算 总金额
BigDecimal totalMoney appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
System.err.println(totalMoney:totalMoney); //totalMoney:17.482.5 查找流中最大 最小值Collectors.maxBy 和 Collectors.minBy 来计算流中的最大或最小值OptionalDish maxDish Dish.menu.stream().collect(Collectors.maxBy(Comparator.comparing(Dish::getCalories)));
maxDish.ifPresent(System.out::println);OptionalDish minDish Dish.menu.stream().collect(Collectors.minBy(Comparator.comparing(Dish::getCalories)));
minDish.ifPresent(System.out::println);2.6 去重import static java.util.Comparator.comparingLong;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;ListFruit unique fruitList.stream().collect(collectingAndThen(toCollection(() - new TreeSet(comparingLong(Fruit::getId))), ArrayList::new)
);3 下表展示 Collectors 类的静态工厂方法