使用Stream操作List

使用Stream流操作List

体验:操作集合变得简单,代码变得简介(必须得会)

话不多说 上代码(举例几种常用的)

一、filter 过滤

filter 顾名思义 过滤 => 将满足条件体里条件的单元全部过滤出来成一个Stream流再通过collect(Collectors.toList())收集成一个List

找出所有性别为女的角色:

 List<TestValue> filterList = myList.stream().filter(i->"女".equals(i.getSex())).collect(Collectors.toList());

格式:List.stram().filter(i->条件体).collect(Collectors.toList())

二、limit() 约束长度

截取前两条数据 limit(2):

List<TestValue> filterLimitList = myList.stream().limit(2).collect(Collectors.toList());

格式:List.stram().limit(长度Long)

三、forEach 遍历

将所有的角色年龄都变为18岁:

myList.forEach(i->i.setSex("18"));

格式:List.forEach(i->(xxxx))

四、Collectors.toList() 将流转换为List格式

五、Collectors.toMap 将某流中某两个字段转换成k-v形式的Map格式

//::为lambda表达式可以理解为new TestValue().getXXX
Map<String, String> map = myList2.stream().collect(Collectors.toMap(TestValue2::getAddress, TestValue2::getPlanet));

格式:myList2.stream().collect(Collectors.toMap(key, value));

5、示例测试

1、角色实体类TestValue

package org.jeecg.modules.portal.controller.test.entity;

public class TestValue {
    private String name;
    private String age;
    private String sex;
    private String address;
    private String planet; //星球



    public TestValue(String name,String age,String sex,String address){
        this.name = name;
        this.age = age;
        this.address = address;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public TestValue setName(String name) {
        this.name = name;
        return this;
    }

    public String getAge() {
        return age;
    }

    public TestValue setAge(String age) {
        this.age = age;
        return this;
    }

    public String getSex() {
        return sex;
    }

    public TestValue setSex(String sex) {
        this.sex = sex;
        return this;
    }

    public String getAddress() {
        return address;
    }

    public TestValue setAddress(String address) {
        this.address = address;
        return this;
    }
    public String getPlanet() {
        return planet;
    }

    public void setPlanet(String planet) {
        this.planet = planet;
    }

}

2、区域实体类TestValue2

package org.jeecg.modules.portal.controller.test.entity;

public class TestValue2 {
    private String address;
    private String planet;//星球
    private String galaxy;//星系


    public TestValue2(String address,String planet,String galaxy){
        this.address = address;
        this.planet = planet;
        this.galaxy = galaxy;

    }

    public String getAddress() {
        return address;
    }

    public TestValue2 setAddress(String address) {
        this.address = address;
        return this;
    }

    public String getPlanet() {
        return planet;
    }

    public TestValue2 setPlanet(String planet) {
        this.planet = planet;
        return this;
    }

    public String getGalaxy() {
        return galaxy;
    }

    public TestValue2 setGalaxy(String galaxy) {
        this.galaxy = galaxy;
        return this;
    }
}

3.控制器(嫌麻烦可以自己在main方法里面跑)

@ApiOperation(value = "测试-流", notes = "测试-流")
@PutMapping(value = "/testD")
public Result<?> testD() {

    List<TestValue> myList = new ArrayList<>();
    myList.add(new TestValue("黑百合", "28", "女", "伊里奥斯"));
    myList.add(new TestValue("白百合", "38", "男", "阿努比斯"));
    myList.add(new TestValue("绿百合", "18", "女", "月球基地"));
    myList.add(new TestValue("红百合", "48", "男", "国王大道"));
    myList.add(new TestValue("黄百合", "18", "女", "沃斯卡亚"));
    myList.add(new TestValue("蓝百合", "08", "男", "努巴尼"));
    myList.add(new TestValue("香水百合", "18", "女", "伊里奥斯"));

    List<TestValue2> myList2 = new ArrayList<>();
    myList2.add(new TestValue2("伊里奥斯", "星球A", "星系1"));
    myList2.add(new TestValue2("阿努比斯", "星球B", "星系1"));
    myList2.add(new TestValue2("月球基地", "星球A", "星系1"));
    myList2.add(new TestValue2("国王大道", "星球D", "星系2"));
    myList2.add(new TestValue2("沃斯卡亚", "星球E", "星系3"));
    myList2.add(new TestValue2("努巴尼", "星球G", "星系3"));
    myList2.add(new TestValue2("扎克镇", "星球G", "星系3"));

    //结合使用
    //获取区域与星系的关系map (::为lambda表达式可以理解为new TestValue().getXXX)
    //将某两个字段转换成k-v形式的Map
    Map<String, String> map = myList2.stream().collect(Collectors.toMap(TestValue2::getAddress, TestValue2::getPlanet));
		
    //给每个角色赋予星系的属性(先遍历foreach -> 然后从地址信息关系map中获取到对应的星系)
    myList.forEach(TestValue->TestValue.setPlanet(map.get(TestValue.getAddress())));
    
    
    
    //filter 顾名思义 过滤 => 将满足条件体里条件的单元全部过滤出来成一个Stream流再通过collect(Collectors.toList())收集成一个List

    //过滤出性别为女的所有角色 这里的i 可以任意取 相当于是myList的的泛型 => new TestValue()
    List<TestValue> filterList = myList.stream().filter(i -> "女".equals(i.getSex())).collect(Collectors.toList());

    //过滤出性别为女的前两条数据
    List<TestValue> filterLimitList = myList.stream().filter(i -> "女".equals(i.getSex())).limit(2).collect(Collectors.toList());

    //遍历List
    //将所有的sex变成"18"
    myList.forEach(i->i.setSex("18"));

    return Result.OK(myList);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值