public static void main(String[] args) { /** * 定义集合l1 并为集合建立串行流 */ List<String> l1 = Arrays.asList("周星驰", "周杰伦", "周星星", "周润发"); // 返回串行流 l1.stream(); // 返回并行流 l1.parallelStream(); }
//值建立流 生成一个字符串流 Stream<String> stream = Stream.of("java8", "Spring", "SpringCloud"); stream.forEach(System.out::println);
/** * 这里以int 为例 long double 再也不举例 */ Stream stream = Arrays.stream(Arrays.asList(10, 20, 30, 40).toArray()); // 根据数组索引范围建立指定Stream stream = Arrays.stream(Arrays.asList(10, 20, 30, 40).toArray(), 0, 2);
stream = Files.lines(Paths.get("C:\\java\\jdbc.properties")); System.out.println(stream.collect(Collectors.toList())); // 指定字符集编码 stream = Files.lines(Paths.get("C:\\java\\jdbc.properties"), Charset.forName("utf-8")); System.out.println(stream.collect(Collectors.toList()));
// 重100 开始 生成偶数流 Stream.iterate(100, n -> n + 2); // 产生1-100 随机数 Stream.generate(() ->(int) (Math.random() * 100 + 1));
@Data public class Order { // 订单id private Integer id; // 订单用户id private Integer userId; // 订单编号 private String orderNo; // 订单日期 private Date orderDate; // 收货地址 private String address; // 建立时间 private Date createDate; // 更新时间 private Date updateDate; // 订单状态 0-未支付 1-已支付 2-待发货 3-已发货 4-已接收 5-已完成 private Integer status; // 是否有效 1-有效订单 0-无效订单 private Integer isValid; //订单总金额 private Double total; } Order order01 = new Order(1, 10, "20190301", new Date(), "上海市-浦东区", new Date(), new Date(), 4, 1, 100.0); Order order02 = new Order(2, 30, "20190302", new Date(), "北京市四惠区", new Date(), new Date(), 1, 1, 2000.0); Order order03 = new Order(3, 20, "20190303", new Date(), "北京市-朝阳区", new Date(), new Date(), 4, 1, 500.0); Order order04 = new Order(4, 40, "20190304", new Date(), "北京市-大兴区", new Date(), new Date(), 4, 1, 256.0); Order order05 = new Order(5, 40, "20190304", new Date(), "上海市-松江区", new Date(), new Date(), 4, 1, 1000.0); ordersList = Arrays.asList(order01, order02, order03, order04, order05);
java
// 过滤有效订单
ordersList.stream().filter((order) -> order.getIsValid() == 1)
.forEach(System.out::println);
筛选有效订单 取第一页数据(每页2条记录) sql
// 过滤有效订单 取第一页数据(每页2条记录)
ordersList.stream().filter((order) -> order.getIsValid() == 1)
.limit(2)
.forEach(System.out::println);
筛选订单集合有效订单 取最后一条记录数据库
// 过滤订单集合有效订单 取最后一条记录
ordersList.stream().filter((order) -> order.getIsValid() == 1)
.skip(ordersList.size() - 2) // 跳过前ordersList.size()-2 记录
.forEach(System.out::println);
筛选有效订单 取第3页数据(每页2条记录)编程
// 过滤有效订单 取第3页数据(每页2条记录) 并打印到控制台
ordersList.stream().filter((order) -> order.getIsValid() == 1)
.skip((3 - 1) * 2)
.limit(2)
.forEach(System.out::println);
筛选无效订单去除重复订单号记录数组
// 过滤无效订单 去除重复订单号记录 重写Order equals 与 hashCode 方法
ordersList.stream().filter((order) -> order.getIsValid() == 0)
.distinct()
.forEach(System.out::println);
dom
//过滤有效订单,获取全部订单编号
ordersList.stream().filter((order) -> order.getIsValid() == 1)
.map((order) -> order.getOrderNo())
.forEach(System.out::println);
过滤有效订单 ,并分离每一个订单下收货地址市区信息函数式编程
ordersList.stream().map(o -> o.getAddress()
.split("-"))
.flatMap(Arrays::stream)
.forEach(System.out::println);
//过滤有效订单 根据用户id 进行排序 ordersList.stream().filter((order) -> order.getIsValid() == 1) .sorted((o1, o2) -> o1.getUserId() - o2.getUserId()) .forEach(System.out::println); //或者等价写法 ordersList.stream().filter((order) -> order.getIsValid() == 1) .sorted(Comparator.comparingInt(Order::getUserId)) .forEach(System.out::println);
//过滤有效订单 若是订单状态相同 根据订单建立时间排序 反之根据订单状态排序 ordersList.stream().filter((order) -> order.getIsValid() == 1) .sorted((o1, o2) -> { if (o1.getStatus().equals(o2.getStatus())) { return o1.getCreateDate().compareTo(o2.getCreateDate()); } else { return o1.getStatus().compareTo(o2.getStatus()); }}) .forEach(System.out::println); // 等价形式 ordersList.stream().filter((order) -> order.getIsValid() == 1) .sorted(Comparator.comparing(Order::getCreateDate) .thenComparing(Comparator.comparing(Order::getStatus))) .forEach(System.out::println);
函数
// 筛选有效订单 匹配是否所有为已支付订单
System.out.println("allMatch匹配结果:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.allMatch((o) -> o.getStatus() != 0)
);
筛选有效订单 匹配是否存在未支付订单性能
// 筛选有效订单 匹配是否存在未支付订单
System.out.println("anyMatch匹配结果:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.anyMatch((o) -> o.getStatus() == 0)
);
筛选有效订单 所有未完成订单学习
// 筛选有效订单 所有未完成订单
System.out.println("noneMatch匹配结果:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.noneMatch((o) -> o.getStatus() == 5)
);
筛选有效订单 返回第一条订单
// 筛选有效订单 返回第一条订单
System.out.println("findAny匹配结果:"+
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.findAny()
.get()
);
筛选全部有效订单 返回订单总数
// 筛选全部有效订单 返回订单总数
System.out.println("count结果:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.count()
);
筛选有效订单 返回金额最大订单金额
// 筛选有效订单 返回金额最大订单金额
System.out.println("订单金额最大值:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.map(Order::getTotal)
.max(Double::compare)
.get()
);
筛选有效订单 返回金额最小订单金额
// 筛选有效订单 返回金额最小订单金额
System.out.println("订单金额最小值:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.map(Order::getTotal)
.min(Double::compare)
.get()
);
// 计算有效订单总金额 System.out.println("有效订单总金额:" + ordersList.stream() .filter((order) -> order.getIsValid() == 1) .map(Order::getTotal) .reduce(Double::sum) .get() );
// 筛选全部有效订单并收集订单列表 ordersList.stream() .filter((order) -> order.getIsValid() == 1) .collect(Collectors.toList()) .forEach(System.out::println);
// 筛选全部有效订单 并收集订单号 与 订单金额 Map<String,Double> map=ordersList.stream().filter((order) -> order.getIsValid() == 1). collect(Collectors.toMap(Order::getOrderNo, Order::getTotal)); // java8 下对map进行遍历操做 若是 Map的Key重复,会报错 map.forEach((k,v)->{ System.out.println("k:"+k+":v:"+v); });
System.out.println("count结果:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .collect(Collectors.counting()) ); System.out.println("count结果:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .count() );
System.out.println("订单总金额:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .collect(Collectors.summarizingDouble(Order::getTotal)) ); System.out.println("订单总金额:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .mapToDouble(Order::getTotal) .sum() ); System.out.println("订单总金额:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .map(Order::getTotal) .reduce(Double::sum) .get() );
System.out.println("用户id=20 有效订单平均每笔消费金额:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .filter((order -> order.getUserId()==20)) .collect(Collectors.averagingDouble(Order::getTotal)) ); System.out.println("用户id=20 有效订单平均每笔消费金额:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .filter((order -> order.getUserId()==20)) .mapToDouble(Order::getTotal) .average() .getAsDouble() ); System.out.println("用户id=20 有效订单平均每笔消费金额:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .filter((order -> order.getUserId()==20)) .collect(Collectors.summarizingDouble(Order::getTotal)) .getAverage() );
System.out.println("订单总金额:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .collect(Collectors.summingDouble(Order::getTotal)) );
System.out.println("最小订单金额:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .map(Order::getTotal) .collect(Collectors.minBy(Double::compare)) );
筛选全部有效订单 并计算最大订单金额
// 筛选全部有效订单 并计算最大订单金额 System.out.println("最大订单金额:"+ ordersList.stream() .filter((order) -> order.getIsValid() == 1) .map(Order::getTotal) .collect(Collectors.maxBy(Double::compare)) );
Map<Integer,List<Order>> g01=ordersList.stream() .filter((order) -> order.getIsValid() == 1) .collect(Collectors.groupingBy(Order::getStatus)); g01.forEach((status,order)->{ System.out.println("----------------"); System.out.println("订单状态:"+status); order.forEach(System.out::println); });
Map<Integer,Map<String,List<Order>>> g02= ordersList.stream() .filter((order) -> order.getIsValid() == 1) .collect(Collectors.groupingBy(Order::getUserId, Collectors.groupingBy((o)->{ if(o.getStatus()==0){ return "未支付"; }else if (o.getStatus()==1){ return "已支付"; }else if (o.getStatus()==2){ return "待发货"; }else if (o.getStatus()==3){ return "已发货"; }else if (o.getStatus()==4){ return "已接收"; } else{ return "已完成"; } } )) ); g02.forEach((userId,m)->{ System.out.println("用户id:"+userId+"-->有效订单以下:"); m.forEach((status,os)->{ System.out.println("状态:"+status+"---订单列表以下:"); os.forEach(System.out::println); }); System.out.println("-----------------------"); });
Map<Boolean,List<Order>> g03= ordersList.stream() .filter((order) -> order.getIsValid() == 1) .collect(Collectors.partitioningBy((o)->o.getTotal()>1000)); g03.forEach((b,os)->{ System.out.println("分区结果:"+b+"--列表结果:"); os.forEach(System.out::println); });
String orderStr=ordersList.stream() .filter((order) -> order.getIsValid() == 1) .map(Order::getOrderNo) .collect(Collectors.joining(",")); System.out.println(orderStr);