java8list打印输出_JAVA8ARRAY、LIST操作汇【5】)-
JAVA8LAM。。。
public class Apple {
private Integer id;
private String name;
private BigDecimal money;
private Integer num;
public Apple(Integer id, String name, BigDecimal money, Integer num) {
this.id = id;
this.name = name;
< = money;
this.num = num;
}
}
List appleList = new ArrayList<>();//存放apple对象集合
Apple apple1 = new Apple(1,"苹果1",new BigDecimal("3.25"),10);
Apple apple12 = new Apple(1,"苹果2",new BigDecimal("1.35"),20);
Apple apple2 = new Apple(2,"⾹蕉",new BigDecimal("2.89"),30);
Apple apple3 = new Apple(3,"荔枝",new BigDecimal("9.99"),40);
appleList.add(apple1);
appleList.add(apple12);
appleList.add(apple2);
appleList.add(apple3);
bigdecimal转换为integer
list.stream().mapToDouble(User::getHeight).sum()//和
list.stream().mapToDouble(User::getHeight).max()//最⼤
list.stream().mapToDouble(User::getHeight).min()//最⼩
list.stream().mapToDouble(User::getHeight).average()//平均值
1. List转Map
id为key,apple对象为value,可以这么做:
/**
* List -> Map
* 需要注意的是:
* toMap 如果集合对象有重复的key,会报错Duplicate key ....
* apple1,apple12的id都为1。
* 可以⽤ (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
*/
Map appleMap = appleList.stream().Map(Apple::getId, a -> a,(k1,k2)->k1));
打印appleMap:
{1=Apple{id=1, name='苹果1', money=3.25, num=10}, 2=Apple{id=2, name='⾹蕉', money=2.89, num=30}, 3=Apple{id=3, name='荔枝', money=9.99, num=40}}
2. 分组
List⾥⾯的对象元素,以某个属性来分组,例如,以id分组,将id相同的放在⼀起:
//List 以ID分组 Map>
Map> groupBy = appleList.stream().upingBy(Apple::getId));
{1=[Apple{id=1, name='苹果1', money=3.25, num=10}, Apple{id=1, name='苹果2', money=1.35, num=20}], 2=[Apple{id=2, name='⾹蕉', money=2.89, num=30}], 3=[Apple{id=3, name='荔枝', money=9.99, num=40}]}
3. 过滤filter: 从集合中过滤出来符合条件的元素(map只是覆盖属性,filter根据判断属性来collect宿主be
an):
//过滤出符合条件的数据
List filterList = appleList.stream().filter(a -> a.getName().equals("⾹蕉")).List());
[Apple{id=2, name='⾹蕉', money=2.89, num=30}]
4. 求和: 将集合中的数据按照某个属性求和:
BigDecimal:
//计算 总⾦额
BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
Integer:
//计算 数量
int sum = appleList.stream().mapToInt(Apple::getNum).sum();
List cc = new ArrayList<>();
cc.add(1);cc.add(2);cc.add(3);
int sum = cc.stream().mapToInt(Integer::intValue).sum();//6
★upingBy进⾏分组、排序等操作:
import javaX.Model.Student;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class FunctionX {
public static void main(String[] args) {
//1.分组计数
List list1= Arrays.asList(new Student(1,"one","zhao"),new Student(2,"one","qian"),new Student(3,"two","sun")); //1.1根据某个属性分组计数
Map result1=list1.stream().upingBy(Student::unting())); System.out.println(result1);
//1.2根据整个实体对象分组计数,当其为String时常使⽤
Map result2=list1.stream().upingBy(Function.identity(),unting())); System.out.println(result2);
//1.3根据分组的key值对结果进⾏排序、放进另⼀个map中并输出
Map xMap=new HashMap<>();
.forEachOrdered(x->xMap.Key(),x.getValue()));
System.out.println(xMap);
//2.分组,并统计其中⼀个属性值得sum或者avg:id总和
Map result3=list1.stream().collect(
);
System.out.println(result3);
} }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。