我就废话不多说了,大家还是直接看代码吧~
List list = new ArrayList();
Order o1 = new Order("1","MCS-2019-1123");
(o1 );
Order o2= new Order("2","MCS-2019-1124");
(o2);
Order o3= new Order("3","MCS-2019-1125");
(o3);
List orderNoList=().map(Order::getOrderNo).collect(());
("输出单号集合:"+orderNoList);
List idList=().map(Order::getId()).collect(());
(idList)
结果
输出第一个:
["MCS-2019-1123", "MCS-2019-1124", "MCS-2019-1125"]
[1, 2, 3]
order类:
public class Order{
String id;
String orderNo;
public Order(String id, String orderNo) {
= id;
= orderNo;
}
public String getId() {
return id;
}
public void setId(String order) {
= id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String message) {
= orderNo;
}
}
补充知识:java8快速对list集合的筛选计算取值总结
在我们日常开发过程中,有很多场景需要对list集合进行取值筛选,以下是我对常用的一些知识点进行总结
首先,创建一个需要用到的对象,例如学生对象,有相关字段:姓名,年龄,性别
public class Student {
private String name;
private int age;
private String sex;
public Student( String name, int age,String sex) {
= age;
= name;
= sex;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
= age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
= sex;
}
}
其次,对这些字段属性进行赋值
Student s1 = new Student("小金",20,"女");
Student s2 = new Student("小宋",21,"女");
Student s3 = new Student("小张",25,"男");
Student s4 = new Student("小王",27,"男");
Student s5 = new Student("小王",30,"未知");
List list = new ArrayList<>();
(s1);
(s2);
(s3);
(s4);
(s5);
1、遍历-foreach
使用stream流进行foreach遍历
().forEach(student->{
//处理逻辑,打印出所有学生的姓名
(());
});
运行结果:
2、筛选list
filter函数的()里,应该放逻辑,判断条件,将符合条件的放到resultList中
代码如下,筛选集合中所有性别为女的学生
List resultList = ().filter(student -> ((),"女")).collect(());
().forEach(student->{
(());
});
运行结果:
3、list去重
根据性别去重
List unique = ().collect((
(() -> new TreeSet<>((Student::getSex))), ArrayList::new));
().forEach(student->{
(());
});
运行结果:
4、取出list集合对象中某一个属性
取出每个对象中的姓名组成一个新的集合
List listStr = ().map(Student::getName).collect(());
去重
List listNew = listStr .stream().map(Student::getName).distinct().collect(());
运行结果:
5、list与map互转,并根据某一属性进行分组
list转map (下方studentMap运行会报错,因为作为key值,name不能重复,所以正式开发中应该使用唯一性id作为key值)
Map studentMap = ().collect((Student::getName, student -> student));
list转数组
String[] listStrs = ()
.filter(e -> ((), "男"))
.sorted((Student::getName))
.map(Student::getName).toArray(String[]::new);
list转map并且分组
Map> listMap = ().collect((Student::getSex));
运行结果:
根据对象某些属性,进行分组
Map studentsMap= ()
.collect((f -> (),())));
map转list
List collect = ().stream().collect(());
6、过滤属性为空的字段
Student s6 = new Student("",30,"男");
(s6);
List stringList = ().map(s -> ()).filter(s -> !()).collect(());
7、根据某一属性进行计算
根据年龄求最大值、最小值、平均值、总和、个数
IntSummaryStatistics resultNum = ().mapToInt((item)->()).summaryStatistics();
("max:"+());
("min:"+());
("sum:"+());
("average:"+());
("count:"+());
运行结果:
注意:
1、求和有三种类型,mapToInt,mapToLong,mapToDouble
2、如果是Bigdecimal数值类型,则计算方法如下,(新建对象)
Frult frult1 = new Frult("西瓜",new BigDecimal(1));
Frult frult2 = new Frult("梨子",new BigDecimal(2));
List frultList = new ArrayList<>();
(frult1);
(frult2);
BigDecimal totalPrice = ().map(Frult::getPrice).reduce(, BigDecimal::add);
//或者用mapToInt()进行强转(int->Bigdecimal)
结语:本人目前用到这么多,希望各位有更好的或者其它的用法给予建议与评论,有错误也希望能得到指正!也希望大家多多支持龙方网络。