java8 -->streams

stream和io流沒(méi)有什么關(guān)系。
它是操作管道獲取source(從各種數(shù)據(jù)中獲得比如array,list....)并處理數(shù)據(jù)

public class study1 {

private static class myRand implements Supplier{
    private int index=0;
    private Random random=new Random();
    
    @Override
    public Object get() {
        int num=random.nextInt(100);
        return String.valueOf(num);
    }
}




static class Person{
    private String name;
    public Person() {
        
    }
    public Person(String name) {
        this.name=name;
    }
    public void setName(String name) {
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public int getage() {
        return Integer.parseInt(name);
    }
}
public static void main(String[] args) throws FileNotFoundException {
    //流的構(gòu)造
    Stream stream=Stream.of("a","b");
    String [] arr=new String[] {"a","b"};
    stream=Stream.of(arr);
    stream=Arrays.stream(arr);
    List<String> list=Arrays.asList(arr);
    stream=list.stream();
    
    //數(shù)值流
    IntStream.of(new int[] {1,2,3,4,5}).forEach(System.out::println);
    IntStream.range(1,3).forEach(System.out::println);                      //1
    IntStream.rangeClosed(1, 3).forEach(System.out::println);               //2   1.2的區(qū)別在于,2是閉區(qū)間摹芙,所以會(huì)輸出1.2.3,而2是開(kāi)區(qū)間智慧輸出1.2

    //流轉(zhuǎn)化為其他類(lèi)型
    Object[] arr2=stream.toArray(String[] :: new);
    Stream stream2=Stream.of(arr2);
    
    //List<String> list2=(List<String>) stream.collect(Collectors.toList());
    Stack stack=(Stack) stream2.collect(Collectors.toCollection(Stack::new));       //每個(gè)資源只能被利用一次
    //String str = stream2.collect(Collectors.joining()).toString();
    //Set set1 = (Set) stream2.collect(Collectors.toSet());
    
    
    //用map把list元素全變?yōu)榇髮?xiě)
    List<String> wordList=new ArrayList<>();
    wordList.add("dasda");
    wordList.add(1,"aaa");
    List<String> list3=wordList.stream()
            .map(String::toUpperCase)
            .collect(Collectors.toList());  
    list3.stream().forEach(System.out::println);
    
    
    //一對(duì)多的map
    Stream<List<Integer>> stream3=Stream.of(
            Arrays.asList(1,2,3),
            Arrays.asList(4,5,6)
            );
    stream3.flatMap((chilelist)->chilelist.stream())                //如果使用map那么這一步得到的是兩個(gè)stream,而flatMap會(huì)將其都合并成一個(gè)stream,那么現(xiàn)在的stream中全部都是數(shù)字
            .forEach(System.out::println);

    //過(guò)濾器filter
    Integer[] num= {1,2,3,4,5,6,7,8};
    Integer[] newnum=Stream.of(num)
            .filter(n -> n%5 == 0)
            .toArray(Integer[] :: new);
    Stream.of(newnum).forEach(System.out::println);
    
    //lines()只是針對(duì)bufferReader的井濒,也就是針對(duì)文件的
    File file=new File("/home/yhw/eclipse-workspace/TheHolleWord/src/streams/words.txt");
    InputStream in=new FileInputStream(file);
    InputStreamReader reader=new InputStreamReader(in);
    BufferedReader b=new BufferedReader(reader);
    List<String> myList=b.lines()
        .flatMap(n -> Stream.of(n.split(" ")))                                      //這里的單位是行燃箭,因?yàn)闆](méi)辦法用StringTokenizer昏苏,所以只能對(duì)每一行分流
        .filter(n -> n.length()>0)
        .collect(Collectors.toList());
    myList.stream()
    .peek(e->System.out.println(e))                                                 //peek和forEach的區(qū)別是肴盏,peak操作不會(huì)被消費(fèi)
    .forEach(System.out::println);
    
    String nu=null;
    Optional.ofNullable(nu).ifPresent(System.out::println);

    
    //reduce合并函數(shù)
    String concat = Stream.of("A","B","C").reduce("",String::concat);
    System.out.println(concat);
    double min=Stream.of(-1.5,-2.0,-3.0).reduce(Double.MIN_VALUE,Double::min);
    System.out.println(min);
    Integer sum=Stream.of(1,2,3,4,5,6).reduce(Integer::sum).get();
    System.out.println(sum);
    
    
    
    //limit指定只要前幾個(gè)數(shù)芋浮,skip去掉前幾個(gè)數(shù)抱环,sorted進(jìn)行排序
    List<Integer> list2=Arrays.asList(1,2,3,4,43,64,63,636,4,63,3,11);
    list2.stream()                                                      //list只能用list.stream建立流
    .limit(8)
    .skip(2)
    .sorted((a1,b1)-> b1.compareTo(a1))                                 //sort可以自定義
    .forEach(System.out::println);

    
    //distinct除去重復(fù)項(xiàng),Match可以匹配到是否有該元素纸巷,其類(lèi)還有NoneMatch,allMatch返回布爾值
    BufferedReader buf=new BufferedReader(new FileReader("/home/yhw/eclipse-workspace/TheHolleWord/src/streams/words.txt"));
    int longlen=buf.lines()
            .mapToInt(ak -> ak.length())                                //直接處理整行處理
            .max()
            .getAsInt();
    System.out.println(longlen);
        
    BufferedReader buff=new BufferedReader(new FileReader("/home/yhw/eclipse-workspace/TheHolleWord/src/streams/words.txt"));
    boolean n=buff.lines()
        .flatMap((mp) -> Stream.of(mp.split(" ")))                          //flatMap是將一行的單詞切分后镇草,變?yōu)榱藛卧~流,相當(dāng)于一行變多個(gè)
        .filter(fi -> fi.length()>0)                                    
        .map(String::toLowerCase)
        .peek(wo -> System.out.println(wo))
        .distinct()
        .anyMatch(word -> word.equals("ages"));                             
    System.out.println(n);
            
    //自定義流:模擬生成隨機(jī)數(shù)何暇,一般用于自定義的數(shù)據(jù)類(lèi)型
    List<Person> list4=(List<Person>) Stream.generate(new myRand()).
        limit(100).
        peek(p->new Person(String.valueOf(p)))
        .collect(Collectors.toList());
    
    
    //conllect歸組
     Map<String, List<Person>> map=(Map<String, List<Person>>) Stream.generate(new myRand2()).
            limit(100).
            collect(Collectors.groupingBy(Person::getName));
            
    Iterator iterator=map.entrySet().iterator();                        //先轉(zhuǎn)化為迭代器陶夜,那么返回的每個(gè)對(duì)象,就是一個(gè)key(String)對(duì)應(yīng)一個(gè)value(List)
    while(iterator.hasNext()) {
        Map.Entry<String,List<Person>> pEntry=(Entry<String, List<Person>>) iterator.next();
        System.out.println(pEntry.getKey()+":"+pEntry.getValue().get(0));
    }
    
    List<Person> list5=new ArrayList<>();
    list5.add(new myRand2().get());
    list5.add(new myRand2().get());
    list5.add(new myRand2().get());
    list5.add(new myRand2().get());
    list5.add(new myRand2().get());
    
    /*Map<Boolean, List<Person>> children = Stream.generate(new myRand()).                                          //這個(gè)p就是object而不是Person
             limit(100).
             collect(Collectors.partitioningBy(p -> p.getAge() < 18));*/
    
    Map<Boolean,List<Person>>maps=list5.stream().collect(Collectors.partitioningBy(p->p.getage()<18));          //只有當(dāng)有明確數(shù)據(jù)類(lèi)型時(shí)裆站,p才是確定的數(shù)據(jù)類(lèi)型
    System.out.println(maps.get(true).size());
}

@SuppressWarnings("rawtypes")
private static class myRand2 implements Supplier{
    private int index=0;
    private Random random=new Random();
    
    @Override
    public Person get() {
        int num=random.nextInt(100);
        return new Person(String.valueOf(num));
    }
}

}
https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末条辟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宏胯,更是在濱河造成了極大的恐慌羽嫡,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肩袍,死亡現(xiàn)場(chǎng)離奇詭異杭棵,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)氛赐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)魂爪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人艰管,你說(shuō)我怎么就攤上這事滓侍。” “怎么了牲芋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵撩笆,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我缸浦,道長(zhǎng)夕冲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任裂逐,我火速辦了婚禮歹鱼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卜高。我一直安慰自己醉冤,他們只是感情好秩霍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蚁阳,像睡著了一般铃绒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上螺捐,一...
    開(kāi)封第一講書(shū)人閱讀 49,856評(píng)論 1 290
  • 那天颠悬,我揣著相機(jī)與錄音,去河邊找鬼定血。 笑死赔癌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澜沟。 我是一名探鬼主播灾票,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼茫虽!你這毒婦竟也來(lái)了刊苍?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤濒析,失蹤者是張志新(化名)和其女友劉穎正什,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體号杏,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婴氮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盾致。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片主经。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖庭惜,靈堂內(nèi)的尸體忽然破棺而出罩驻,到底是詐尸還是另有隱情,我是刑警寧澤蜈块,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布鉴腻,位于F島的核電站迷扇,受9級(jí)特大地震影響百揭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜓席,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一器一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厨内,春花似錦祈秕、人聲如沸渺贤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)志鞍。三九已至,卻和暖如春方仿,著一層夾襖步出監(jiān)牢的瞬間固棚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工仙蚜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留此洲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓委粉,卻偏偏與公主長(zhǎng)得像呜师,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贾节,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理汁汗,服務(wù)發(fā)現(xiàn),斷路器氮双,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 定義 A sequence of elements supporting sequential and paral...
    驪驊閱讀 387評(píng)論 0 0
  • 2018年2月18號(hào)碰酝,相博超媽媽 好開(kāi)心,今天要回娘家了戴差。 今年妹妹是結(jié)婚第一年回來(lái)拜年送爸,是新女婿,大媽讓...
    一年級(jí)四班相博超媽媽閱讀 323評(píng)論 0 1
  • (一) 寒夜漫漫萬(wàn)跡簫暖释,延陵處處江水杳袭厂; 此生惘然東風(fēng)謝,舊事難抿覆泥沼球匕。 城南今年飛雪早纹磺,一剪寒梅映墻角; 蛛廊...
    東籬花飛閱讀 307評(píng)論 4 15
  • 最近接觸到了兩個(gè)概念:直接融資和間接融資亮曹。我并沒(méi)有認(rèn)真研究這兩個(gè)概念橄杨,我直覺(jué)的理解是:直接融資就是需要錢(qián)的企業(yè),找...
    Lcww閱讀 343評(píng)論 0 0