<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ![](https://cdn.zimug.com/wx-zimug.png) 下面是視頻(優酷的清晰度有限):還是建議大家去B站觀看:[B站觀看地址](https://www.bilibili.com/video/BV1sE411P7C1/)。如果您覺得我做的工作對您有幫助,請去B站點贊、關注、轉發、收藏,您的支持是我不竭的創作動力! ```[youku] XNDU5Nzk4MTgwMA ``` ## 一、基礎代碼準備 建立一個實體類,該實體類有五個屬性。下面的代碼使用了lombok的注解Data、AllArgsConstructor,這樣我們就不用寫get、set方法和全參構造函數了。lombok會幫助我們在編譯期生成這些模式化的代碼。 ~~~ @Data @AllArgsConstructor public class Employee { private Integer id; private Integer age; //年齡 private String gender; //性別 private String firstName; private String lastName; } ~~~ 寫一個測試類,這個測試類的內容也很簡單,新建十個Employee 對象 ~~~ public class StreamFilterPredicate { public static void main(String[] args){ Employee e1 = new Employee(1,23,"M","Rick","Beethovan"); Employee e2 = new Employee(2,13,"F","Martina","Hengis"); Employee e3 = new Employee(3,43,"M","Ricky","Martin"); Employee e4 = new Employee(4,26,"M","Jon","Lowman"); Employee e5 = new Employee(5,19,"F","Cristine","Maria"); Employee e6 = new Employee(6,15,"M","David","Feezor"); Employee e7 = new Employee(7,68,"F","Melissa","Roy"); Employee e8 = new Employee(8,79,"M","Alex","Gussin"); Employee e9 = new Employee(9,15,"F","Neetu","Singh"); Employee e10 = new Employee(10,45,"M","Naveen","Jain"); List<Employee> employees = Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10); List<Employee> filtered = employees.stream() .filter(e -> e.getAge() > 70 && e.getGender().equals("M")) .collect(Collectors.toList()); System.out.println(filtered); } } ~~~ 需要注意的是上面的filter傳入了lambda表達式(之前的章節我們已經講過了),表達過濾年齡大于70并且男性的Employee員工。輸出如下: ~~~ [Employee(id=8, age=79, gender=M, firstName=Alex, lastName=Gussin)] ~~~ ## 二、什么是謂詞邏輯? 下面要說我們的重點了,通過之前的章節的講解,我們已經知道lambda表達式表達的是一個匿名接口函數的實現。那具體到Stream.filter()中,它表達的是什么呢?看下圖:可以看出它表達的是一個Predicate接口,在英語中這個單詞的意思是:謂詞。 ![](https://img.kancloud.cn/94/f0/94f0643476bef3f7d204a41e91949597_810x116.png) ### **什么是謂詞?(百度百科)** ![](https://img.kancloud.cn/ca/66/ca66f27fc2b03b8135d608d00f71bfe0_519x89.png) ### 什么是謂詞邏輯? WHERE 和 AND 限定了主語employee是什么,那么WHERE和AND語句所代表的邏輯就是謂詞邏輯 ~~~ SELECT * FROM employee WHERE age > 70 AND gender = 'M' ~~~ ## 三、謂詞邏輯的復用 通常情況下,filter函數中lambda表達式為一次性使用的謂詞邏輯。如果我們的謂詞邏輯需要被多處、多場景、多代碼中使用,通常將它抽取出來單獨定義到它所限定的主語實體中。 比如:將下面的謂詞邏輯定義在Employee實體class中。 ~~~ public static Predicate<Employee> ageGreaterThan70 = x -> x.getAge() >70; public static Predicate<Employee> genderM = x -> x.getGender().equals("M"); ~~~ ### 3.1.and語法(交集) ~~~ List<Employee> filtered = employees.stream() .filter(Employee.ageGreaterThan70.and(Employee.genderM)) .collect(Collectors.toList()); ~~~ 輸出如下: ~~~ [Employee(id=8, age=79, gender=M, firstName=Alex, lastName=Gussin)] ~~~ ### 3.2.or語法(并集) ~~~ List<Employee> filtered = employees.stream() .filter(Employee.ageGreaterThan70.or(Employee.genderM)) .collect(Collectors.toList()); ~~~ 輸出如下:實際上就是年齡大于70的和所有的男性(由于79的那位也是男性,所以就是所有的男性) ~~~ [Employee(id=1, age=23, gender=M, firstName=Rick, lastName=Beethovan), Employee(id=3, age=43, gender=M, firstName=Ricky, lastName=Martin), Employee(id=4, age=26, gender=M, firstName=Jon, lastName=Lowman), Employee(id=6, age=15, gender=M, firstName=David, lastName=Feezor), Employee(id=8, age=79, gender=M, firstName=Alex, lastName=Gussin), Employee(id=10, age=45, gender=M, firstName=Naveen, lastName=Jain)] ~~~ ### 3.3.negate語法(取反) ~~~ List<Employee> filtered = employees.stream() .filter(Employee.ageGreaterThan70.or(Employee.genderM).negate()) .collect(Collectors.toList()); ~~~ 輸出如下:把上一小節代碼的結果取反,實際上就是所有的女性 ~~~ [Employee(id=2, age=13, gender=F, firstName=Martina, lastName=Hengis), Employee(id=5, age=19, gender=F, firstName=Cristine, lastName=Maria), Employee(id=7, age=68, gender=F, firstName=Melissa, lastName=Roy), Employee(id=9, age=15, gender=F, firstName=Neetu, lastName=Singh)] ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看