Java stream的常見用法

不講原理,只說用法。java

1,集合遍歷spa

public class StreamTest {

    public static void main(String[] args) {
        //1 遍歷
        
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        //使用lambda表達式輸出list中的每一個值
        list.forEach(c->{
            System.out.println(c);
        });
        //調用方法
        list.forEach(StreamTest::showList);
    }
    
    public static void showList(String value) {
        System.out.println(value);
    }
}

 

2,篩選集合code

 List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        
       List<String> selectResult = list.stream().filter(value->{
           return value.startsWith("a"); 
        }).collect(Collectors.toList());

 

4,篩選並去重blog

List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        
       List<String> selectResult = list.stream().filter(value->{
           return value.startsWith("a"); 
        }).distinct().collect(Collectors.toList());

 

5,截斷流  取出結果的前n個元素排序

 

 List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        
       List<String> selectResult = list.stream().filter(value->{
           return value.startsWith("a"); 
        }).limit(3).collect(Collectors.toList());

 

6,跳過元素,它和limit是互補的遊戲

 List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        
       List<String> selectResult = list.stream().filter(value->{
           return value.startsWith("a"); 
        }).skip(3).collect(Collectors.toList());

 

7,映射,對集合的每一個元素操做,好比獲取揹包中全部物品的數量ip

        List<Long> countList = role.getBag().getBagMap().values().stream().map(BagItem::getCount).collect(Collectors.toList());

 

8,集合流操做 ,例如 找到玩家揹包中道具數據大於5的前3個道具id字符串

 Role role = new Role();
        List<String> result = role.getBag().getBagMap().values().
                stream().filter(item -> item.getCount() > 5).map(BagItem::getItemId).
                limit(3).collect(Collectors.toList());

其中,filter是過濾,map是遍歷全部項,並返回一個值,limit是取三個結果,collect是收集並返回。只有在collect時才執行計算代碼。get

9,流的扁平化  flatmap博客

 它能夠把幾個相同類型的流合併成一個新的流。好比,獲取List<String>集合中,各個字符串的字母集合,並去重。

 List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        
       List<String> selectResult = list.stream().map(v->v.split("")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());
     

輸出結果

[a, b, s, c]

 

10,匹配判斷

 

List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        //是否全部的項都是以a開頭
        boolean result = list.stream().allMatch(c->{
           return c.startsWith("a"); 
        });
        System.out.println(result);
        //是否有任何一項是否以a開頭
        result = list.stream().anyMatch(c->{
           return c.startsWith("a"); 
        });
        //是否都不以a開頭
        result = list.stream().noneMatch(c->{
           return c.startsWith("a"); 
        });

這就是對應Java中的&& ,||

 

11,list轉map

//轉map
        List<Role> roles = new ArrayList<>();
        Map<String, Role> map = roles.stream().collect(Collectors.toMap(Role::getRid, role-> role));
        

 12,排序

List<Student> studentList=Arrays.asList(new Student(1,"ziwen1",10),new Student(2,"aiwen2",18),new Student(3,"biwen3",28));

List<Student> studentList1=studentList.stream().sorted().collect(Collectors.toList());//天然序列

List<Student> studentList2=studentList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());//逆序

List<Student> studentList3=studentList.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());//根據年齡天然順序

List<Student> studentList4=studentList.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());//根據年齡逆序

 13,求最值

 

 PlayerHero hero1 = new PlayerHero();
        hero1.setHeroInfoId("1");
        hero1.setCombat(70);
        
        PlayerHero hero2 = new PlayerHero();
        hero2.setHeroInfoId("2");
        hero2.setCombat(20);
        PlayerHero hero3 = new PlayerHero();
        hero3.setHeroInfoId("3");
        hero3.setCombat(50);
        
        String id = Stream.of(hero2,hero3,hero1).max(Comparator.comparing(PlayerHero::getCombat)).get().getHeroInfoId();
        System.out.println(id);

 14 ,求和

int totalCalories = menu.stream().collect(summingInt(Dish::getCalories));

 


歡迎加羣交流,QQ羣:66728073,197321069,398808948 還能夠掃描博客左上角二維碼,關注遊戲技術網公衆號

相關文章
相關標籤/搜索