java stream使用方法

1.filter

 //见名知意过滤出想要的东西会返回一个新的steam(),如果想要2个以上的过滤条件 用&& || !
 
//获得所有的车辆   以下demo都是对cars进行处理,添加了一个重复的Car对象以便后续的demo的使用
List<Car> cars = getCars();
cars.forEach(System.out::println);
	
//cars list打印
Car{id=1, name='第1辆车', price=5.0}
Car{id=2, name='第2辆车', price=10.0}
Car{id=3, name='第3辆车', price=15.0}
Car{id=4, name='第4辆车', price=20.0}
Car{id=5, name='第5辆车', price=25.0}
Car{id=1, name='第1辆车', price=5.0}

	
List<Car> filter =
            cars.stream().filter(car -> car.getPrice() < 20 && car.getId()>1).collect(Collectors.toList());
filter.forEach(System.out::println);

--------------------过滤出价格小于20的并且id大于1的----------------------------
Car{id=2, name='第2辆车', price=10.0}
Car{id=3, name='第3辆车', price=15.0}
	

2.limit

		
//limit取前两个
List<Car> limit = cars.stream().limit(2).collect(Collectors.toList());
limit .forEach(System.out::println);

//打印
---------------------limit指定前两个---------------------------
Car{id=1, name='第1辆车', price=5.0}
Car{id=2, name='第2辆车', price=10.0}



3.skip 跳过前N个

//跳过前两个
List<Car> skip = cars.stream().skip(2).collect(Collectors.toList());
skip .forEach(System.out::println);

//打印
----------------------skip--------------------------
Car{id=3, name='第3辆车', price=15.0}
Car{id=4, name='第4辆车', price=20.0}
Car{id=5, name='第5辆车', price=25.0}
Car{id=1, name='第1辆车', price=5.0}

4.distinct 去重 对象去重的话得重写equals和hashCode

 List<Car> distinct = cars.stream().distinct().collect(Collectors.toList());
 distinct.forEach(System.out::println);

//打印
Car{id=1, name='第1辆车', price=5.0}
Car{id=2, name='第2辆车', price=10.0}
Car{id=3, name='第3辆车', price=15.0}
Car{id=4, name='第4辆车', price=20.0}
Car{id=5, name='第5辆车', price=25.0}

5 sorted排序 有2个重载的方法一个是无参的默认为正序排列,另一个得实现Comparator<? super T> comparator

//排序                                  
//Comparator.comparing(Car::getPrice).reversed()是逆序

List<Car> sorted = cars.stream().sorted(Comparator.comparing(Car::getPrice)).collect(Collectors.toList());
sorted.forEach(System.out::println);

//打印
------------------排序------------------------------
Car{id=1, name='第1辆车', price=5.0}
Car{id=1, name='第1辆车', price=5.0}
Car{id=2, name='第2辆车', price=10.0}
Car{id=3, name='第3辆车', price=15.0}
Car{id=4, name='第4辆车', price=20.0}
Car{id=5, name='第5辆车', price=25.0}

6 map 可以理解能够转换成其他的数据

//把Car对象转成NewCar对象
List<NewCar> newCars = cars.stream().map(car -> {

    NewCar newCar = new NewCar();

    newCar.setId(car.getId());
    newCar.setName("我是新的---" + car.getName());
    newCar.setPrice(car.getPrice());

    return newCar;

}).collect(Collectors.toList());

newCars.forEach(System.out::println);

//打印
NewCar{id=1, name='我是新的---第1辆车', price=5.0}
NewCar{id=2, name='我是新的---第2辆车', price=10.0}
NewCar{id=3, name='我是新的---第3辆车', price=15.0}
NewCar{id=4, name='我是新的---第4辆车', price=20.0}
NewCar{id=5, name='我是新的---第5辆车', price=25.0}
NewCar{id=1, name='我是新的---第1辆车', price=5.0}

7 reduce 根据指定的计算模型进行计算也可以理解成聚合

//使用map使其变成BigDecimal,再对其价格进行相加
BigDecimal reduce = cars.stream().map(car -> new BigDecimal(car.getPrice())).reduce(BigDecimal.ZERO, BigDecimal::add);

//打印
80

8 Collectors.groupingBy 根据条件进行分组

//按照id一样的进行合并
Map<Integer, List<Car>> groupingBy = cars.stream().collect(Collectors.groupingBy(car -> car.getId()));

groupingBy.forEach((k,v)->{
    System.out.println(k+":"+v);
});

//打印
1:[Car{id=1, name='第1辆车', price=5.0}, Car{id=1, name='第1辆车', price=5.0}]
2:[Car{id=2, name='第2辆车', price=10.0}]
3:[Car{id=3, name='第3辆车', price=15.0}]
4:[Car{id=4, name='第4辆车', price=20.0}]
5:[Car{id=5, name='第5辆车', price=25.0}]

9.把以上demo合起来使用

找出cars里价格大于5.0 转成NewCar对象并把id一样的进行分组 最终的效果就是[{id:"",list:[{},{}]},{id:"",list:[{},{}]}]
//先把过滤后的car对象再转成NewCar对象
Map<Integer, List<NewCar>> collect = cars.stream()
                                        .filter(car -> car.getPrice() > 5.0)
                                        .map(car -> {
                                            NewCar newCar = new NewCar();
                                            newCar.setId(car.getId());
                                            newCar.setName("我是新的---" + car.getName());
                                            newCar.setPrice(car.getPrice());
                                            return newCar;
                                        }).collect(Collectors.groupingBy(NewCar::getId));
//打印
2<---->[NewCar{id=2, name='我是新的---第2辆车', price=10.0}]
3<---->[NewCar{id=3, name='我是新的---第3辆车', price=15.0}]
4<---->[NewCar{id=4, name='我是新的---第4辆车', price=20.0}]
5<---->[NewCar{id=5, name='我是新的---第5辆车', price=25.0}]


//再把上面的map里的Key取出来,collect.get(key)就是NewCarList
List<Map<String, Object>> list = collect.keySet().stream().map(k -> {
            Map<String, Object> result = new HashMap<>(2);
            result.put("id", k);
            List<NewCar> newCarsList = collect.get(k);
            result.put("list", newCarsList);
            return result;
        }).collect(Collectors.toList());
//打印
{list=[NewCar{id=2, name='我是新的---第2辆车', price=10.0}], id=2}
{list=[NewCar{id=3, name='我是新的---第3辆车', price=15.0}], id=3}
{list=[NewCar{id=4, name='我是新的---第4辆车', price=20.0}], id=4}
{list=[NewCar{id=5, name='我是新的---第5辆车', price=25.0}], id=5}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值