天天學JAVA-JAVA基礎(5)

如果覺得我寫的還行,請關注我的博客並且點個贊喲。本文主要介紹JAVA Stream 流相關知識,通過閱讀本文,你將掌握Stream的基本用法。
如果不知道Stream是什麼,請閱讀博文天天學JAVA-JAVA基礎(2)這篇文章。

1.流的常用創建方法有以下四種
2.Stream具體用法
3.一道阿里面試題,你會做嗎?

1. 流的常用創建方法有以下四種

package com.cy.lambda.learning;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Stream;

/**
 * cy
 *
 */
public class CreateStreamDemo {
    public static void main(String[] args) {
        //1.使用Collection下的 stream() 和 parallelStream() 方法
        List<String> list = new ArrayList<String>();
        Stream<String> stream  =list.stream();//創建一個串行流
        Stream<String> parallelStream  =list.parallelStream();//創建一個並行流

        //2.使用Arrays 中的 stream() 方法,將數組轉成流
        String[] nums = new String[10];
        Stream<String> alist = Arrays.stream(nums);

        //3.使用Stream中的靜態方法:of()、iterate()、generate
        //of
        Stream<Integer> streamk = Stream.of(1,2,3,4,5,6);
        //iterate
        Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 2).limit(6);
        stream2.forEach(System.out::println); // 0 2 4 6 8 10
        //generate
        Stream<Double> stream3 = Stream.generate(Math::random).limit(2);
        stream3.forEach(System.out::println);
        
        //4.使用 Pattern.splitAsStream() 方法,將字符串分隔成流
        Pattern pattern = Pattern.compile(",");
        Stream<String> stringStream = pattern.splitAsStream("a,b,c,d");
        stringStream.forEach(System.out::println);
    }
}

2.Stream具體用法
1.篩選和切片

package com.cy.lambda.learning;

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

/**
 * cy
 * 流的篩選與切片
 */
public class FilteringAndSlicingDemo {

    public static void main(String[] args) {

        //數據初始化
         List<Integer>  list =  new ArrayList<>();
         list.add(1);
         list.add(3);
         for (int i = 0; i < 10 ;i ++){
             list.add(i);
             //System.out.println(i);
         }

         //filter:過濾流中的某些元素
        list.stream().filter(s -> s<3)   //1,1,2
                .forEach(System.out::print);
        // limit(n):獲取n個元素
        list.stream().limit(3)
                .forEach(System.out::print);
        //skip(n):跳過n元素,配合limit(n)可實現分頁
        list.stream().skip(2).forEach(System.out::print);
        //distinct:通過流中元素的 hashCode() 和 equals() 去除重複元素
        list.stream().distinct().forEach(System.out::print);

        //綜合
        list.stream().filter(s -> s<=6)
                     .distinct()
                     .skip(2)
                      .limit(3).forEach(System.out::print;);
    }
}

2.映射

package com.cy.lambda.learning;

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

public class MappingDemo {
    public static void main(String[] args) {
//map(Function f)	接受一個函數作爲參數,
//並將函數應用到每一個元素上,返回新的元素
//        mapToDouble(ToDoubleFunction f)	返回的新元素爲double類型
//        mapToInt(ToIntFunction f)	返回的新元素爲int類型
//        mapToLong(ToLongFunction f)	返回的新元素爲long類型
//        flatMap(Function f)	操作多層嵌套的流,使其扁平化

        List<Integer> list =  new ArrayList<>();
        list.add(1);
        list.add(3);
        for (int i = 0; i < 10 ;i ++){
            list.add(i);
            //System.out.println(i);
        }
        //接受一個函數作爲參數,並將函數應用到每一個元素上,返回新的元素
        System.out.println("int :");
        list.stream().map(s -> s.intValue());
        //返回的新元素爲double類型
        list.stream().mapToDouble(s -> s.intValue());
        // mapToInt(ToIntFunction f)	返回的新元素爲int類型
        list.stream().mapToInt(s -> s.intValue());
        //mapToLong(ToLongFunction f)	返回的新元素爲long類型
        list.stream().mapToLong(s-> s).forEach(System.out::print);
        //flatMap(Function f)	操作多層嵌套的流,使其扁平化
        list.stream().flatMap(s ->{
            Stream<String> stream =  Stream.empty();
            return stream;
        });
    }
}

3 排序

package com.cy.lambda.learning;

import java.util.Arrays;
import java.util.List;

/**
 * cc程序員
 *
 */
public class StreamSortDemo {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("aa", "ff", "dd","bb");
        //sorted 產生一個新流,其中按自然順序排序
        list.stream().sorted().forEach(System.out::print);
        System.out.println();
        People people  =  new People("111",11,"1");
        People people1  =  new People("113",13,"1");
        People people2  =  new People("115",13,"1");
         //
        List<People> list1 =   Arrays.asList(people,people1,people2);
        list1.stream().sorted(
                (p1,p2)  ->{
                    if(p1.getUserNaMme().equals(p2.getUserNaMme())){
                        return  p1.getAge() - p2.getAge();
                    }else {
                        return   p1.getUserNaMme().compareTo(p2.getUserNaMme()) ;
                    }
                }
        ).forEach(s ->{
            System.out.println(s.toString());
        });
    }
}
class  People{
    private   String userNaMme;
    private   Integer age;
    private   String  sex;

    public People(String userNaMme, Integer age, String sex) {
        this.userNaMme = userNaMme;
        this.age = age;
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getUserNaMme() {
        return userNaMme;
    }

    public void setUserNaMme(String userNaMme) {
        this.userNaMme = userNaMme;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "People{" +
                "userNaMme='" + userNaMme + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

今天的代碼分享就到這裏了,上面的例子代碼已經上傳至github上stream實例,有需要的可以下載下來運行。下面分享一道來自阿里的面試題。

3.有一個類B繼承自類A,他們數據成員如下:

class A {
...
privateint &a;
};
class B : public A {
...
private:
     int a;
public:
     const int b;
     A c;
     static const char* d;
     A* e;
};

則構造函數中,成員變量一定要通過初始化列表來初始化的是____。

A. b c
B.b c e
C.b c d e
D.c e
E.b d
F.b e

如果你想知道答案或者你知道答案,請留言或者關注下方公衆號,並且回覆1029,將會得到答案和解析喲。

如果你覺得我寫的還行,請關注我的博客並且點個贊喲,也請關注我的公衆號並加入下方QQ羣,每天都會定時推送乾貨以及共享一些優質的學習資料和視頻喲.
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章