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);