java集合 stream 相關用法(1)


 

 

java8新增一種流式數據,讓操作集合數據更簡單方便。

 

定義基本對象:

public class Peo {

    private String name;
    
    private String id;

    
    
    public Peo() {
        super();
    }

    public Peo(String name, String id) {
        super();
        this.name = name;
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    
    
}

 

1.toMap的使用

 使用toMap方法將list集合轉出對應的map

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Stemap {

    public static void main(String[] args) {
        
        List<Peo> list = new ArrayList<>();
        
        list.add(new Peo("a", "1"));
        list.add(new Peo("b", "2"));
        list.add(new Peo("c", "3"));
        list.add(new Peo("d", "4"));
        
        
        Map<String, Peo> map = list.stream().collect(Collectors.toMap(Peo::getId, s -> s));
//獲取單字段集合 List<String> names = list.stream().map(e -> e.getName).collect(Collectors.toList()); map.keySet().forEach(s
->{ System.out.println(s); }); } }

使用

Collectors.toMap方法將list轉成Map,key = Id,value = Peo對象
注意key值不能有重復,如果有重復就會報錯,為了解決這種問題,我們可以使用以下的寫法:

Map<String, Peo> map = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s1));

多加的一個方法(s1,s2)->s1,是指當遇到key值相同時,value使用已經添加的,忽略后面的對象,如果這么寫(s1,s2)->s2,將會把后面的對象替換到map中,如下:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Stemap {

    public static void main(String[] args) {
        
        List<Peo> list = new ArrayList<>();
        
        list.add(new Peo("a", "1"));
    /*    list.add(new Peo("b", "2"));
        list.add(new Peo("c", "3"));
        list.add(new Peo("d", "4"));*/
        list.add(new Peo("e", "1"));
        
        
        Map<String, Peo> map1 = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s1));
        
        System.out.println(map1.get("1").getName());
        
        Map<String, Peo> map2 = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s2));
        
        System.out.println(map2.get("1").getName());
        
        /*map1.values().forEach(s->{
            System.out.println(s);
        });*/
        
    }
}

輸出如下:

2.groupBy

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Stemap {

    public static void main(String[] args) {
        
        List<Peo> list = new ArrayList<>();
        
        list.add(new Peo("a", "1"));
        list.add(new Peo("b", "2"));
        list.add(new Peo("c", "3"));
        list.add(new Peo("d", "4"));
        list.add(new Peo("e", "1"));
        
        
        Map<String, List<Peo>> map1 = list.stream().collect(Collectors.groupingBy(Peo::getId));
        
        System.out.println("map 數量:"+map1.size());
        
        System.out.println("key = 1 數量:"+map1.get("1").size());
        map1.get("1").forEach(p ->{
            System.out.println(p.getName());
        });
        
        
        /*map1.values().forEach(s->{
            System.out.println(s);
        });*/
        
    }
}

輸出如下:

我們可以通過groupBy方法對list數據分組,指定分組的key。

3.filter

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Stemap {

    public static void main(String[] args) {
        
        List<Peo> list = new ArrayList<>();
        
        list.add(new Peo("a", "1"));
        list.add(new Peo("b", "2"));
        list.add(new Peo("c", "3"));
        list.add(new Peo("d", "4"));
        list.add(new Peo("e", "1"));
        
        
        list = list.stream().filter(peo -> "1".equals(peo.getId())).collect(Collectors.toList());;
        
        list.forEach(p ->{
            System.out.println(p.getName());
        });
        
        
        /*map1.values().forEach(s->{
            System.out.println(s);
        });*/
        
    }
}

輸出:

可用通過filter過濾出滿足一定條件的數據。

 

后續還有關於distinct、limit、skip、allMatch等等方法,后面繼續補充


免責聲明!

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



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