---> 我的前端學習筆記
--->行業內最新最羣的報告,工作日每日更新
⭐️Java8中Stream流式方法
Lambda表達式的簡單規則
lambda表達式的要求:
1.不改變原數據
2.不在內存中存數據
3.不可重複使用
?stream流
stream流的運行圖
功能展示
(0).filter過濾
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); List<Student> students = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); //篩選年齡大於15歲的學生 List<Student> students1 = students.stream().filter(s -> s.getAge() > 15).collect(Collectors.toList()); System.out.println("篩選年齡大於15歲的學生---------"); students1.stream().forEach(list->{ System.out.println(list); }); //篩選住在浙江省的學生 List<Student> students2 = students.stream().filter(s -> "浙江".equals(s.getAddress())).collect(Collectors.toList()); System.out.println("篩選住在浙江省的學生-----------"); students1.stream().forEach(list->{ System.out.println(list); }); }
(1).Map轉換/通過條件生成新的集合
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); List<Student> students = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); //在地址前面加上部分信息,只獲取地址 List<String> lists = students.stream().map(s -> "住址:" + s.getAddress()).collect(Collectors.toList()); //循環輸出 lists.forEach(list ->System.out.println(list)); }
(2).mapToInt/long/float求和
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); List<Student> students = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); //求所有學生的年齡和 int sum = students.stream().mapToInt(stu -> stu.getAge()).sum(); System.out.println(sum); }
(3).Sorted排序
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); Student s5 = new Student(4L, "田七", 16, "浙江"); List<Student> students = new ArrayList<>(); students.add(s3); students.add(s4); students.add(s1); students.add(s2); students.add(s5); //排序規則 雙重規則 後面的規則權重高!!!! //從小到大排序 List<Student> lists = students.stream() .sorted(Comparator.comparingInt(Student::getAge)) .sorted(Comparator.comparingLong(Student::getId)) .collect(Collectors.toList()); lists.stream().forEach(list -> { System.out.println(list); }); }
上面那個是從小到大排序,現在展示從大到小排序
//從大到小排序 List<Student> lists2 = students.stream().sorted((stu1, stu2) -> Integer.compare(stu2.getAge(), stu1.getAge())).collect(Collectors.toList()); lists2.stream().forEach(list -> { System.out.println(list); });
(4).Match匹配/查詢是否包含某條件
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); List<Student> students = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); // 有一個滿足 anyMatch:Stream 中任意一個元素符合傳入的 predicate,返回 true Boolean anyMatch = students.stream().anyMatch(s -> "南京".equals(s.getAddress())); if (!anyMatch) { System.out.println("沒有南京人"); } // 全部滿足 allMatch:Stream 中全部元素符合傳入的 predicate,返回 true Boolean allMatch = students.stream().allMatch(s -> s.getAge() >= 15); if (allMatch) { System.out.println("所有學生都滿15週歲"); } // 沒有一個滿足 noneMatch:Stream 中沒有一個元素符合傳入的 predicate,返回 true Boolean noneMatch = students.stream().noneMatch(s -> "王八".equals(s.getName())); if (noneMatch) { System.out.println("沒有叫王八的同學"); } }
(5).Min/Max 求最大最小值
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); List<Student> students = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); //min 求最小值 Student student = students.stream().min(Comparator.comparingInt(Student::getAge)).get(); // 傳統寫法 Student minS = students.stream().min((stu1,stu2) ->Integer.compare(stu1.getAge(),stu2.getAge())).get(); System.out.println(student); //max 求最大值 Student student2 = students.stream().max(Comparator.comparingInt(Student::getAge)).get(); System.out.println(student2); }
(6).Distinct 去重
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); Student s5 = new Student(4L, "田七", 17, "浙江"); List<Student> students = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); students.add(s5); //去重 List<Student> lists = students.stream().distinct().collect(Collectors.toList()); //便利輸出 lists.stream().forEach(list -> { System.out.println(list.getName()); }); }
(7).Skip 刪除前n個數據
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); Student s5 = new Student(4L, "田七", 16, "浙江"); List<Student> students = new ArrayList<>(); students.add(s3); students.add(s4); students.add(s1); students.add(s2); students.add(s5); // skip,刪除前n個元素 List<Student> lists = students.stream().skip(2).collect(Collectors.toList()); lists.stream().forEach(list->{ System.out.println(list); }); }
(8).Limit限制輸出個數
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); List<Student> students = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); //限制返回個數 List<Student> lists = students.stream().limit(2).collect(Collectors.toList()); lists.stream().forEach(list -> { System.out.println(list); }); }
(9).Reduce (聚合)轉換成一條數據
public static void main(String[] args) { Student s1 = new Student(1L, "張三", 15, "浙江"); Student s2 = new Student(2L, "李四", 15, "湖北"); Student s3 = new Student(3L, "王五", 17, "北京"); Student s4 = new Student(4L, "田七", 17, "浙江"); Student s5 = new Student(4L, "田七", 16, "浙江"); List<Student> students = new ArrayList<>(); students.add(s3); students.add(s4); students.add(s1); students.add(s2); students.add(s5); // 將他們的姓名聚合成一個字符串 String appendStr = students.stream().map(stu->stu.getName()).reduce("", (a, b)-> a + b); System.out.println(appendStr); }
閒聊時刻
10年短信公司,互聯網100強企業!主營業務:短信(國內和國際)App H5一鍵免密登錄,防薅羊毛接口,圖片OCR,空號檢測,活躍號檢測,人證覈驗,活體檢測,高防ddos攻擊等等200多個企業服務接口!需要的聯繫他13592366783 官方鏈接:https://zz.253.com/v5.html#/register?uid=1953
自己公司需求 偶然間 用了一家第三方接口供應商,產品應有盡有,很齊全,對接文檔非常詳細,彼此都很節約時間,主要非常穩定,包括服務方面很給力,有興趣的博友,可以聯繫他,算是對合作夥伴的支持了