java8 .stream().sorted().filter().map().collect()用法


https://blog.csdn.net/shine_guo_star/article/details/94383319

 

steam():把一個源數據,可以是集合,數組,I/O channel, 產生器generator 等,轉化成流。

map():用於映射每個元素到對應的結果。以下代碼片段使用 map 輸出了元素對應的平方數:

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 獲取對應的平方數
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

filter():filter 方法用於通過設置的條件過濾出元素。以下代碼片段使用 filter 方法過濾出空字符串:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 獲取空字符串的數量
int count = strings.stream().filter(string -> string.isEmpty()).count();

sorted(): 用於對流進行排序。以下代碼片段使用 sorted 方法對輸出的 10 個隨機數進行排序:

Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

 Collectors: 類實現了很多歸約操作,例如將流轉換成集合和聚合元素。Collectors 可用於返回列表或字符串:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");

List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
System.out.println("篩選列表: " + filtered);

String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("合並字符串: " + mergedString);

 

 

//對象類型stream排序
List<User> users = new ArrayList<User>(){
    {
        add(new User("a", "1983/12/24", 36));
        add(new User("a", "1993/12/24", 26));
        add(new User("a", "1973/12/24", 46));
        add(new User("a", "1995/12/24", 24));
        add(new User("a", "1981/12/24", 38));
        add(new User("a", "1991/12/24", 28));
    }
};

//升序
List<User> ascUsers = users.stream().sorted(Comparator.comparing(User :: getAge)).collect(Collectors.toList());
//降序
List<User> descUsers = users.stream().sorted(Comparator.comparing(User :: getAge).reversed()).collect(Collectors.toList());

用戶類:必須繼承Comparable接口,否則排序調用Comparator.comparing的時候會報錯,這點很重要。
public class User implements Comparable<User> {

    @NotNull
    private String name;

    @Format(value="YYYY-MM-DD", message = "字符串格式不正確")
    private String birthday;

    private int age;

    public User(){
    }

    public User(String name, String birthday, int age){
        this.name = name;
        this.birthday = birthday;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String brithday) {
        this.birthday = birthday;
    }

    /**
     * 兩個相同類型的對象,比較多屬相是否相等的時候
     * 可以通過重寫equals方法來實現
     * @param object
     * @return
     */

    @Override
    public boolean equals(Object object) {
        if (object instanceof User) {
            return this.name.equals(((User) object).getName()) && this.age == ((User) object).getAge();
        } else {
            return false;
        }
    }

    /**
     * 重寫 equals 就應當重寫 hashcode
     * 因為當兩個對象hashcode 值相等,但是 equals 比較為 false,
     * 那么在 HashMap 中會產生鏈表,影響查詢性能
     * @return
     */
    @Override
    public int hashCode() {
        return  this.name.hashCode() + age;
    }

    @Override
    public int compareTo(User user) {
        return name.compareTo(user.getName());
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM