stream 提取某字段_java8从list集合中取出某一属性的值的集合案例

时间:2025-04-25 07:01:14

我就废话不多说了,大家还是直接看代码吧~

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)

结语:本人目前用到这么多,希望各位有更好的或者其它的用法给予建议与评论,有错误也希望能得到指正!也希望大家多多支持龙方网络。