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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 用 Java 過濾列表 原文:http://zetcode.com/java/filterlist/ 在本教程中,我們展示了如何使用 Java 過濾列表。 本教程介紹了六種過濾列表的方法。 我們使用四個不同的庫:Apache Commons,Google Guava,Eclipse Collections 和 Spring core。 在所有六個示例中,我們將過濾人員列表。 `Person`是具有三個屬性的 Java 類:`age`,`name`和`sex`。 ## 使用 Java `for`循環過濾列表 在第一個示例中,我們使用迭代來過濾 Java 中的列表。 `com/zetcode/Person.java` ```java package com.zetcode; enum Gender { MALE, FEMALE } public class Person { private int age; private String name; private Gender sex; public Person(int age, String name, Gender sex) { this.age = age; this.name = name; this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Gender getSex() { return sex; } public void setSex(Gender sex) { this.sex = sex; } @Override public String toString() { final StringBuilder sb = new StringBuilder("Person{"); sb.append("age=").append(age); sb.append(", name='").append(name).append('\''); sb.append(", sex=").append(sex); sb.append('}'); return sb.toString(); } } ``` 我們有這個`Person` bean。 我們將過濾包含這些 bean 的列表。 `toString()`方法給出了 bean 的字符串表示形式。 當我們打印過濾后的元素列表時,這將很有幫助。 `com/zetcode/FilterListEx.java` ```java package com.zetcode; import java.util.ArrayList; import java.util.List; public class FilterListEx { public static void main(String[] args) { var p1 = new Person(34, "Michael", Gender.MALE); var p2 = new Person(17, "Jane", Gender.FEMALE); var p3 = new Person(28, "John", Gender.MALE); var p4 = new Person(47, "Peter", Gender.MALE); var p5 = new Person(27, "Lucy", Gender.FEMALE); var persons = List.of(p1, p2, p3, p4, p5); var result = new ArrayList<Person>(); for (Person person: persons) { if (person.getAge() > 30) { result.add(person); } } System.out.println(result); } } ``` 該示例過濾人員列表。 結果列表包含 30 歲以上的人。 ```java for (Person person: persons) { if (person.getAge() > 30) { result.add(person); } } ``` 一個`for`循環用于遍歷人員列表并創建一個新的具有 30 歲以上人員的人員。 ```java [Person{age=34, name=Michael, sex=MALE}, Person{age=47, name=Peter, sex=MALE}] ``` 這是示例的輸出。 ## 使用 Java8 流過濾列表 在下一個示例中,我們使用 Java8 流 API 來過濾列表。 `com/zetcode/FilterListEx2.java` ```java package com.zetcode; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class FilterListEx2 { public static void main(String[] args) { var p1 = new Person(34, "Michael", Gender.MALE); var p2 = new Person(17, "Jane", Gender.FEMALE); var p3 = new Person(28, "John", Gender.MALE); var p4 = new Person(47, "Peter", Gender.MALE); var p5 = new Person(27, "Lucy", Gender.FEMALE); var persons = List.of(p1, p2, p3, p4, p5); Predicate<Person> byAge = person -> person.getAge() > 30; var result = persons.stream().filter(byAge) .collect(Collectors.toList()); System.out.println(result); } } ``` Java 流 API 用于過濾數據以僅包含 30 歲以上的人員。 ```java Predicate<Person> byAge = person -> person.getAge() > 30; ``` 該謂詞返回年齡大于三十的元素。 ```java var result = persons.stream().filter(byAge) .collect(Collectors.toList()); ``` `persons`列表用謂詞過濾,并生成一個新的結果列表。 ## 使用 Apache `CollectionUtils`過濾列表 在下一個示例中,我們使用 Apache `CollectionUtils`過濾數據。 它為`Collection`實例提供了工具方法和修飾符。 ```java <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> ``` 我們使用這些 Maven 依賴項。 `commons-lang`用于`toString()`方法中使用的`ToStringBuilder`。 `com/zetcode/Person.java` ```java package com.zetcode; import org.apache.commons.lang.builder.ToStringBuilder; enum Gender { MALE, FEMALE } public class Person { private int age; private String name; private Gender sex; public Person(int age, String name, Gender sex) { this.age = age; this.name = name; this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Gender getSex() { return sex; } public void setSex(Gender sex) { this.sex = sex; } @Override public String toString() { return new ToStringBuilder(Person.class). append("Age", age). append("Name", name). append("Sex", sex). toString(); } } ``` `toString()`方法內部的`ToStringBuilder()`對`Person` bean 進行了改進。 `com/zetcode/FilterListEx3.java` ```java package com.zetcode; import org.apache.commons.collections.CollectionUtils; import java.util.ArrayList; import java.util.List; public class FilterListEx3 { public static void main(String[] args) { var p1 = new Person(34, "Michael", Gender.MALE); var p2 = new Person(17, "Jane", Gender.FEMALE); var p3 = new Person(28, "John", Gender.MALE); var p4 = new Person(47, "Peter", Gender.MALE); var p5 = new Person(27, "Lucy", Gender.FEMALE); var persons = List.of(p1, p2, p3, p4, p5); var result = new ArrayList<>(persons); CollectionUtils.filter(result, o -> ((Person) o).getAge() < 30); System.out.println(result); } } ``` 該示例使用 Apache Commons 庫中的 Apache `CollectionUtils`過濾人員 bean 列表。 ```java var result = new ArrayList<>(persons); ``` 將創建列表的新副本。 ```java CollectionUtils.filter(result, o -> ((Person) o).getAge() < 30); ``` `CollectionUtils.filter()`通過對每個元素應用謂詞來過濾集合。 如果謂詞返回`false`,則刪除該元素。 ## 使用 Google Guava 過濾列表 在以下示例中,我們使用 Google Guava 過濾列表。 Google Guava 是 Java 通用庫的開源集。 ```java <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency> ``` 對于 Guava 庫,我們使用此依賴項。 `com/zetcode/Person.java` ```java package com.zetcode; import com.google.common.base.MoreObjects; enum Gender { MALE, FEMALE } public class Person { private int age; private String name; private Gender sex; public Person(int age, String name, Gender sex) { this.age = age; this.name = name; this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Gender getSex() { return sex; } public void setSex(Gender sex) { this.sex = sex; } @Override public String toString() { return MoreObjects.toStringHelper(Person.class) .add("Age", age) .add("Name", name) .add("Sex", sex) .toString(); } } ``` `MoreObjects.toStringHelper()`用于改進`toString()`方法。 `com/zetcode/FilterListEx4.java` ```java package com.zetcode; import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; import com.google.common.collect.Lists; public class FilterListEx4 { public static void main(String[] args) { var persons = Lists.newArrayList( new Person(34, "Michael", Gender.MALE), new Person(17, "Jane", Gender.FEMALE), new Person(28, "John", Gender.MALE), new Person(47, "Peter", Gender.MALE), new Person(27, "Lucy", Gender.FEMALE) ); Predicate<Person> byGender = person -> person.getSex() == Gender.MALE; var results = FluentIterable.from(persons) .filter(byGender) .toList(); System.out.println(results); } } ``` 該代碼示例過濾列表以僅包含男性。 ```java var persons = Lists.newArrayList( new Person(34, "Michael", Gender.MALE), new Person(17, "Jane", Gender.FEMALE), new Person(28, "John", Gender.MALE), new Person(47, "Peter", Gender.MALE), new Person(27, "Lucy", Gender.FEMALE) ); ``` 我們使用 Guava 的`newArrayList()`方法在一張照片中創建一個可變列表。 ```java Predicate<Person> byGender = person -> person.getSex() == Gender.MALE; ``` 對于男性,此謂詞返回`true`。 ```java var results = FluentIterable.from(persons) .filter(byGender) .toList(); ``` 使用`FluentIterable`,我們使用謂詞過濾原始列表并將其放入新列表中。 ## 使用 Eclipse 集合過濾列表 在以下示例中,我們將使用 Eclipse 集合過濾列表。 Eclipse 集合是 Java 的集合框架。 它具有與 JDK 兼容的`List`,`Set`和`Map`實現,并具有豐富的 API,在 JDK 中找不到的其他類型(例如`Bags`,`Multimaps`)以及與所有與 JDK 兼容的任何工具`Collections`,`Arrays`,`Maps`或`Strings`。 ```java <dependency> <groupId>org.eclipse.collections</groupId> <artifactId>eclipse-collections-api</artifactId> <version>7.1.0</version> </dependency> <dependency> <groupId>org.eclipse.collections</groupId> <artifactId>eclipse-collections</artifactId> <version>7.1.0</version> </dependency> ``` 對于程序,我們使用這兩個 Maven 依賴項。 `com/zetcode/FilterListEx5.java` ```java package com.zetcode; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.utility.Iterate; import java.util.List; public class FilterListEx5 { public static void main(String[] args) { var persons = Lists.immutable.of( new Person(34, "Michael", Gender.MALE), new Person(17, "Jane", Gender.FEMALE), new Person(28, "John", Gender.MALE), new Person(47, "Peter", Gender.MALE), new Person(27, "Lucy", Gender.FEMALE) ); Predicate<Person> lessThan30 = (Predicate<Person>) person -> person.getAge() < 30; var result = (List<Person>) Iterate.select(persons, lessThan30); System.out.println(result); } } ``` 該代碼示例創建一個包含 30 歲以下人員的過濾列表。 ```java Predicate<Person> lessThan30 = (Predicate<Person>) person -> person.getAge() < 30; ``` 創建謂詞以接受年齡小于 30 的元素。 ```java var result = (List<Person>) Iterate.select(persons, lessThan30); ``` `Iterate.select()`返回一個新集合,其中僅包含對于指定謂詞求值為`true`的元素。 ## 使用 Spring 的`CollectionUtils`過濾列表 在下一個示例中,我們將使用 Spring 的`CollectionUtils`過濾列表。 它包含其他集合工具方法。 ```java <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.1.7.RELEASE</version> </dependency> ``` 該項目包含 Spring Core JAR 的 Maven 依賴項。 `com/zetcode/FilterListEx6.java` ```java package com.zetcode; import org.springframework.cglib.core.CollectionUtils; import java.util.ArrayList; import java.util.Arrays; public class FilterListEx6 { public static void main(String[] args) { var p1 = new Person(34, "Michael", Gender.MALE); var p2 = new Person(17, "Jane", Gender.FEMALE); var p3 = new Person(28, "John", Gender.MALE); var p4 = new Person(47, "Peter", Gender.MALE); var p5 = new Person(27, "Lucy", Gender.FEMALE); var persons = Arrays.asList(p1, p2, p3, p4, p5); var result = new ArrayList<>(persons); CollectionUtils.filter(result, p -> ((Person) p).getAge() > 30); System.out.println(result); } } ``` 該代碼示例使用 Spring 的`CollectionUtils`創建一個過濾列表,其中包含 30 歲以上的人員。 ```java var result = new ArrayList<>(persons); ``` 與 Apache `CollectionUtils`類似,將創建原始列表的副本。 該示例將修改`result`列表。 ```java CollectionUtils.filter(result, p -> ((Person) p).getAge() > 30); ``` `CollectionUtils.filter()`方法使用給定的謂詞過濾`result`列表。 ```java [Person{age=34, name=Michael, sex=MALE}, Person{age=47, name=Peter, sex=MALE}] ``` This is the output of the example. 在本教程中,我們使用了六種不同的方法來過濾 Java 列表。 您可能也對以下相關教程感興趣: [Java `ArrayList`教程](/articles/javaarraylist/), [Java 比較器和可比對象](/java/comparablecomparator/), [Java 教程](/lang/java/), [Java 流過濾器](/java/streamfilter/) ,[用 Java 讀取網頁](/articles/javareadwebpage/) 或 [Google Guava 簡介](/articles/guava/)。 列出 [Java 教程](/all/#java)。
                  <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>

                              哎呀哎呀视频在线观看