中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

懷化 網(wǎng)站建設(shè)2345網(wǎng)址導(dǎo)航設(shè)為主頁(yè)

懷化 網(wǎng)站建設(shè),2345網(wǎng)址導(dǎo)航設(shè)為主頁(yè),wordpress 來(lái)源,做足球推薦網(wǎng)站能賺錢嗎目錄 一、 引言 二、 Stream流概述 三、Stream流的使用步驟 1. 獲取Stream流 1.1 單列集合 1.2 雙列集合 1.3 數(shù)組 1.4 零散數(shù)據(jù) 2. Stream流的中間方法 3. Stream流的終結(jié)方法 四、 練習(xí) 1. 數(shù)據(jù)過(guò)濾 2. 數(shù)據(jù)操作 - 按年齡篩選 3. 數(shù)據(jù)操作 - 演員信息要求…

目錄

一、 引言

二、 Stream流概述

三、Stream流的使用步驟

?1.? 獲取Stream流

1.1? 單列集合

1.2? 雙列集合

1.3? 數(shù)組

1.4? 零散數(shù)據(jù)

2. Stream流的中間方法

3. Stream流的終結(jié)方法

四、 練習(xí)

1.? 數(shù)據(jù)過(guò)濾

2.? 數(shù)據(jù)操作?- 按年齡篩選

3. 數(shù)據(jù)操作 - 演員信息要求篩選


一、 引言

初識(shí)Stream流的作用:

需求:按照下面的要求完成集合的創(chuàng)建和遍歷,創(chuàng)建一個(gè)集合,存儲(chǔ)多個(gè)字符串元素

?通過(guò)下面代碼,顯然我們清晰的看到使用Stream流更為方便,而使用不同的集合遍歷就有些復(fù)雜。

public class Test01 {public static void main(String[] args) {ArrayList<String> list1 = new ArrayList<>();list1.add("張無(wú)忌");list1.add("周正若");list1.add("趙斌");list1.add("張強(qiáng)");list1.add("張三豐");// Stream流list1.stream().filter(name -> name.startsWith("張")).filter(name -> name.length() == 3).forEach(name -> System.out.println(name));// 張無(wú)忌// 張三豐// 1.把所有“張”姓開(kāi)頭元素存儲(chǔ)到新集合ArrayList<String> list2 = new ArrayList<>();for (String name : list1) {if (name.startsWith("張")) {list2.add(name);}}System.out.println(list2); // [張無(wú)忌, 張強(qiáng), 張三豐]// 2.把所有“張”姓開(kāi)頭且長(zhǎng)度為3的元素存儲(chǔ)到新集合ArrayList<String> list3 = new ArrayList<>();for (String name : list2) {if (name.length() == 3) {list3.add(name);}}System.out.println(list3); // [張無(wú)忌, 張三豐]}
}

二、 Stream流概述

例如上面的小例子,Stream流的思想如下:

順序篩選

?Stream流的作用:

?結(jié)合了Lambda表達(dá)式,簡(jiǎn)化集合、數(shù)字的操作。

三、Stream流的使用步驟

  1. 先得到一條Stream流(流水線),并把數(shù)據(jù)放上去。
  2. 使用中間方法對(duì)流水線上的數(shù)據(jù)進(jìn)行操作。
  3. 使用終結(jié)方法對(duì)流水線上的數(shù)據(jù)進(jìn)行操作。
過(guò)濾、轉(zhuǎn)換中間方法方法調(diào)用完畢之后,還可以調(diào)用其他方法
統(tǒng)計(jì)、打印終結(jié)方法最后一步,調(diào)用完畢之后,不能調(diào)用其他方法

?1.? 獲取Stream流

獲取方式方法名說(shuō)明
單列集合default? Stream<E>? stream()Collection中的默認(rèn)方法
雙列集合無(wú)

無(wú)法直接使用stream流,需要通過(guò)keySet()或者entrySet()變成單列集合

數(shù)組public? static <T>? Stream <T>? stream(T [ ] array)Arrays工具類中的靜態(tài)方法
一堆零散數(shù)據(jù)public? static <T>? Stream <T>? of(T... values)stream接口中的靜態(tài)方法

1.1? 單列集合

public class StreamTest {public static void main(String[] args) {//單列集合獲取Stream流ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "a","b","c","d","e");//獲取到一個(gè)流水線,并把集合中的數(shù)據(jù)方法流水線上//Stream<String> stream1 = list.stream();//使用終結(jié)方法打印流水線上數(shù)據(jù)//stream1.forEach( s ->System.out.println(s) );list.stream().forEach(s -> System.out.println(s));}
}

1.2? 雙列集合

public class StreamTest {public static void main(String[] args) {//雙列集合獲取Stream流 //1. 創(chuàng)建雙列集合HashMap<String, Integer> hm = new HashMap<>();//2. 添加數(shù)據(jù)hm.put("aaa", 111);hm.put("bbb", 222);hm.put("ccc", 333);//3.1 獲取Stream流方法一: keySet()//鍵hm.keySet().stream().forEach(s -> System.out.println(s));//3.2 獲取Stream流方法二:entrySet()//鍵值對(duì)hm.entrySet().stream().forEach(s -> System.out.println(s));	 }
}

1.3? 數(shù)組

Stream接口中靜態(tài)方法of的細(xì)節(jié):

  • 方法的形參是一個(gè)可變參數(shù),可以傳遞一堆零散數(shù)據(jù),也可以傳遞數(shù)組。
  • 但是數(shù)組必須是引用數(shù)據(jù)類型。
  • 如果傳遞的是基本數(shù)據(jù)類型,是會(huì)把整個(gè)數(shù)組相當(dāng)做一個(gè)元素,放到一個(gè)stream流當(dāng)中。
public class StreamTest {public static void main(String[] args) {//數(shù)組獲取Stream流 //1.創(chuàng)建基本數(shù)據(jù)類型數(shù)組int[] arr1 = {1,2,3,4,5,6,7,8,9,10};//獲取streamArrays.stream(arr1).forEach(s -> System.out.println(s));//2.創(chuàng)建引用數(shù)據(jù)類型數(shù)組String[] arr2 = {"a","b","c"};//獲取streamArrays.stream(arr2).forEach(s -> System.out.println(s));//方式是錯(cuò)誤的!!!//Stream接口中靜態(tài)方法of的細(xì)節(jié)//方法的形參是一個(gè)可變參數(shù),可以傳遞一堆零散數(shù)據(jù),也可以傳遞數(shù)組//但是數(shù)組必須是引用數(shù)據(jù)類型//如果傳遞的是基本數(shù)據(jù)類型,是會(huì)把整個(gè)數(shù)組相當(dāng)做一個(gè)元素,放到一個(gè)stream流當(dāng)中Stream.of(arr2).forEach(s -> System.out.println(s));Stream.of(arr1).forEach(s -> System.out.println(s)); //[I@1b28cdfa}
}

1.4? 零散數(shù)據(jù)

細(xì)節(jié): 一堆零散數(shù)據(jù)需要是相同的數(shù)據(jù)類型。

public class StreamTest {public static void main(String[] args) {//零散數(shù)據(jù)獲取Stream流 //基本數(shù)據(jù)類型Stream.of(1,2,3,4,5).forEach(s -> System.out.println(s));//引用數(shù)據(jù)類型Stream.of("a","b","c","d","e").forEach(s -> System.out.println(s));}
}

2. Stream流的中間方法

方法名稱說(shuō)明
Stream<T> filter?( Predicate<? super T>? predicate )過(guò)濾
Stream<T> limit?( long? maxSize)獲取前幾個(gè)元素
Stream<T> skip?( long? n )跳過(guò)前幾個(gè)元素
Stream<T> distinct?( )元素去重,依賴(hashCode和equals方法)
static <T> Stream<T> concat?( Stream a ,? Stream b )合并a和b兩個(gè)流為一個(gè)流
Stream<R> map?( Function<T ,R>? mapper )轉(zhuǎn)換流中的數(shù)據(jù)類型

注意一:中間方法,返回新的Stream流,原來(lái)的Stream流只能使用一次,建議使用鏈?zhǔn)骄幊獭?/p>

注意二:修改Stream流中的數(shù)據(jù),不會(huì)影響原來(lái)集合或者數(shù)組中的數(shù)據(jù)。

public class StreamTest01 {public static void main(String[] args) {//1.過(guò)濾:把開(kāi)頭的留下,其余數(shù)據(jù)過(guò)濾不要ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "張三","李四","王五","趙六","張七");ArrayList<String> list2 = new ArrayList<>();Collections.addAll(list2, "張三","李四","王五","趙六","張三");ArrayList<String> list3 = new ArrayList<>();Collections.addAll(list3, "孫七","錢八");ArrayList<String> list4 = new ArrayList<>();Collections.addAll(list2, "張三-23","李四-24","王五-25");list.stream().filter(new Predicate<String>() {//匿名內(nèi)部類太麻煩 需要縮寫@Overridepublic boolean test(String s) {//如果返回值為true,表示當(dāng)前數(shù)據(jù)留下//如果返回值為false,表示當(dāng)前數(shù)據(jù)舍棄return s.startsWith("張");}}).forEach(s -> System.out.println(s)); //張三 張七list.stream().filter(s -> s.startsWith("張")).forEach(s -> System.out.println(s));//2. 獲取前幾個(gè)元素  list.stream().limit(3).forEach(s -> System.out.println(s));  //張三 李四 王五//3. 跳過(guò)list.stream().skip(4).forEach(s -> System.out.println(s));  //張七//4.去重list2.stream().distinct().forEach(s -> System.out.println(s)); //張三 李四 王五 趙六//5. 合并Stream.concat(list2.stream(), list3.stream()).forEach(s -> System.out.println(s));//6.轉(zhuǎn)換數(shù)據(jù)類型//只能獲取集合里面的年齡并打印//第一個(gè)類型:流中原本的數(shù)據(jù)類型//第二個(gè)類型:將要轉(zhuǎn)變成為的數(shù)據(jù)類型list4.stream().map(new Function<String,Integer>() {@Override//apply: 依次表示流中的每一盒數(shù)據(jù)//返回值:表示轉(zhuǎn)化之前的數(shù)據(jù)public Integer apply(String s) {String[] arr = s.split("-");String ageString = arr[1];int age = Integer.parseInt(ageString);return age;}}).forEach(s -> System.out.println(s));list.stream().map(s ->Integer.parseInt(s.split("-")[1])).forEach(s -> System.out.println(s));}
}

3. Stream流的終結(jié)方法

方法名稱說(shuō)明
void forEach ( Consumer action )遍歷
long count ( )統(tǒng)計(jì)
toArray ( )收集流中的數(shù)據(jù),放到數(shù)組中
collect ( Collector collector )收集流中的數(shù)據(jù),放到集合中
public class StreamTest02 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "張三", "李四", "王五", "趙六");// 遍歷// Consumer的泛型:表示流中的數(shù)據(jù)類型// accept方法的形參s:依次表示流中的每一個(gè)數(shù)據(jù)//list.stream().forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});list.stream().forEach(s -> System.out.println(s)); // 張三 李四 王五 趙六// 統(tǒng)計(jì)long count = list.stream().count();System.out.println(count); // 4// 收集數(shù)據(jù)放進(jìn)數(shù)組Object[] arr1 = list.stream().toArray();System.out.println(Arrays.toString(arr1)); // [張三, 李四, 王五, 趙六]// 指定數(shù)據(jù)類型// Infunction的泛型:具體類型的數(shù)組// apply中形參:流中數(shù)據(jù)的個(gè)數(shù),要跟數(shù)組長(zhǎng)度一致// apply的返回值:具體類型的數(shù)組String[] arr2 = list.stream().toArray(new IntFunction<String[]>() {@Overridepublic String[] apply(int value) {return new String[value];}});// toArray方法中的參數(shù):只是創(chuàng)建一個(gè)指定類型的數(shù)組// toArray底層: 會(huì)此意得到流中的每一個(gè)數(shù)據(jù),并把數(shù)據(jù)放到數(shù)組中// toArray的返回值:是一個(gè)裝著流里面所有數(shù)據(jù)的數(shù)組System.out.println(Arrays.toString(arr2));// lambda表達(dá)式String[] arr3 = list.stream().toArray(value -> new String[value]);System.out.println(Arrays.toString(arr3));}
}

?collect方法:

public class StreamTest {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "張三-男-23", "李四-男-24", "王五-男-25", "趙六-女-27", "孫八-女-28");//收集到List集合當(dāng)中//需求://將所有的男性收集起來(lái)List<String> newList = list.stream().filter(s-> "男".equals(s.split("-")[1])).collect(Collectors.toList());System.out.println(newList);  //[張三-男-23, 李四-男-24, 王五-男-25]//收集到Set集合當(dāng)中Set<String> newSet = list.stream().filter(s-> "男".equals(s.split("-")[1])).collect(Collectors.toSet());System.out.println(newSet);//收集到Map集合當(dāng)中//鍵: 姓名  值: 年齡//toMap://參數(shù)一表示鍵的生成規(guī)則  參數(shù)二表示值得生成規(guī)則//參數(shù)一:  //Function泛型一:表示流中每一個(gè)數(shù)據(jù)的類型 ;//        泛型二:表示Map集合中鍵的數(shù)據(jù)類型//方法apply 形參:一次表示流里面的每一個(gè)數(shù)據(jù)//        方法體:生成鍵的代碼 //        返回值:已生成的鍵//參數(shù)二://Function泛型一:表示流中每一個(gè)數(shù)據(jù)的類型 ;//        泛型二:表示Map集合中值的數(shù)據(jù)類型//方法apply 形參:一次表示流里面的每一個(gè)數(shù)據(jù)//        方法體:生成值的代碼 //        返回值:已生成的值Map<String, Integer> newMap = list.stream().filter(s-> "男".equals(s.split("-")[1])).collect(Collectors.toMap(new Function<String, String>() {@Overridepublic String apply(String s) {return s.split("-")[0];}}, new Function<String, Integer >() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s.split("-")[2]);}}));System.out.println(newMap);  //{李四=24, 張三=23, 王五=25}//lambda表達(dá)式Map<String, Integer> newMap1 = list.stream().filter(s-> "男".equals(s.split("-")[1])).collect(Collectors.toMap( s-> s.split("-")[0], s-> Integer.parseInt(s.split("-")[2])));System.out.println(newMap1);}
}

四、 練習(xí)

1.? 數(shù)據(jù)過(guò)濾

需求:

定義一個(gè)集合,并添加一些整數(shù)1,2,3,4,5,6,7,8,9,10

過(guò)濾奇數(shù),只留下偶數(shù)。
并將結(jié)果保存起來(lái)

public class StreamDemo {public static void main(String[] args) {// 1.定義一個(gè)集合ArrayList<Integer> list = new ArrayList<>();// 2.添加數(shù)據(jù)Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);// 3.過(guò)濾奇數(shù),只留偶數(shù)// 進(jìn)行判斷,如果是偶數(shù),返回trueList<Integer> list2 = list.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());System.out.println(list2); //[2, 4, 6, 8, 10]}
}

2.? 數(shù)據(jù)操作?- 按年齡篩選

需求:
創(chuàng)建一個(gè)ArrayList集合,并添加以下字符串,字符串中前面是姓名,后面是年齡

? ? ? “zhangsan,23”
? ? ? “l(fā)isi,24"
? ? ? “wangwu,25”
保留年齡大于等于24歲的人,并將結(jié)果收集到Map集合中,姓名為鍵,年齡為值

public class StreamDemo {public static void main(String[] args) {// 1.定義一個(gè)集合ArrayList<String> list = new ArrayList<>();//2.集合添加字符串list.add( "zhangsan,23");list.add("lisi,24");list.add("wangwu,25");//3.保留年齡大于24歲的人Map<String, Integer> map = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 24).collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));System.out.println(map);  //{lisi=24, wangwu=25}}
}

3. 數(shù)據(jù)操作 - 演員信息要求篩選

現(xiàn)在有兩個(gè)ArrayList集合,
第一個(gè)集合中:存儲(chǔ)6名男演員的名字和年齡。第二個(gè)集合中:存儲(chǔ)6名女演員的名字和年齡。姓名和年齡中間用逗號(hào)隔開(kāi)。比如:張三,23
要求完成如下的操作:

  1. 男演員只要名字為3個(gè)字的前兩人
  2. 女演員只要姓楊的,并且不要第一個(gè)
  3. 把過(guò)濾后的男演員姓名和女演員姓名合并到一起
  4. 將上一步的演員信息封裝成Actor對(duì)象。
  5. 將所有的演員對(duì)象都保存到List集合中。

備注:演員類Actor,屬性有:name,age

public class StreamDemo {public static void main(String[] args) {// 1.定義兩個(gè)集合ArrayList<String> manList = new ArrayList<>();ArrayList<String> womenList = new ArrayList<>();// 2.添加數(shù)據(jù)Collections.addAll(manList, "蔡坤坤,24", "葉購(gòu)成,23", "劉不甜,22", "吳簽,24", "谷嘉,30", "肖梁梁,27");Collections.addAll(womenList, "趙小穎,35", "楊穎,36", "高元元,43", "張?zhí)焯?31", "劉詩(shī),35", "楊小冪,33");// 3. 男演員只要名字為3個(gè)字的前兩個(gè)人Stream<String> stream1 = manList.stream().filter(s -> s.split(",")[0].length() == 3).limit(2);
//		.forEach(s -> System.out.println(s)); // 蔡坤坤,24  葉購(gòu)成,23// 葉購(gòu)成,23//4.女演員只要姓楊的 并且不要第一個(gè)Stream<String> stream2 = womenList.stream().filter(s -> s.split(",")[0].startsWith("楊")).skip(1);
//		.forEach(s -> System.out.println(s));  //楊小冪,33//5.把過(guò)濾的男演員和女演員信息合并在一起//演員信息封裝進(jìn)Actor對(duì)象//String -> Actor對(duì)象(類型轉(zhuǎn)換)List<Actor> list = Stream.concat(stream1, stream2).map(s -> new Actor(s.split(",")[0],Integer.parseInt(s.split(",")[1]))).collect(Collectors.toList());System.out.println(list);}
}
http://www.risenshineclean.com/news/9569.html

相關(guān)文章:

  • 合肥萬(wàn)戶網(wǎng)絡(luò)科技有限公司搜索引擎優(yōu)化的主要工作
  • 上虞網(wǎng)站設(shè)計(jì)城關(guān)網(wǎng)站seo
  • 沈陽(yáng)做網(wǎng)站公司重慶seo排名
  • 國(guó)內(nèi)課程網(wǎng)站建設(shè)現(xiàn)狀永久免費(fèi)低代碼開(kāi)發(fā)平臺(tái)
  • 新華社兩學(xué)一做網(wǎng)站seo整合營(yíng)銷
  • 編輯網(wǎng)站內(nèi)容有沒(méi)有批量辦法什么是seo關(guān)鍵詞
  • 網(wǎng)站程序和空間區(qū)別網(wǎng)絡(luò)推廣優(yōu)化網(wǎng)站
  • 寧波網(wǎng)站建設(shè)推廣公司青島百度快速排名優(yōu)化
  • 零食網(wǎng)站頁(yè)面模板湖南專業(yè)seo公司
  • 房產(chǎn)信息網(wǎng)站模板電商平臺(tái)怎么加入
  • 音樂(lè)網(wǎng)站開(kāi)發(fā)參考文獻(xiàn)百度指數(shù)代表什么意思
  • 雞西公司做網(wǎng)站關(guān)鍵詞分為哪幾類
  • 哪有專做注冊(cè)小網(wǎng)站的客戶資源買賣平臺(tái)
  • wordpress懸浮bar深圳seo網(wǎng)站優(yōu)化公司
  • 企業(yè)網(wǎng)站怎么做推廣比較好網(wǎng)站模板建站公司
  • 二手車網(wǎng)站建站海豹直播nba
  • 做蛋糕有哪些網(wǎng)站域名查詢網(wǎng)
  • 網(wǎng)站360做的標(biāo)記如何取消市場(chǎng)營(yíng)銷策劃方案3000字
  • wordpress定時(shí)插件seo是什么意思seo是什么職位
  • 濰坊哪家網(wǎng)站制作公司好關(guān)鍵詞歌詞任然
  • 網(wǎng)站開(kāi)發(fā)工程師自學(xué)個(gè)人開(kāi)發(fā)app可以上架嗎
  • 營(yíng)口市代做網(wǎng)站三只松鼠口碑營(yíng)銷案例
  • 網(wǎng)站的標(biāo)簽怎么修改做國(guó)外網(wǎng)站
  • 射陽(yáng)網(wǎng)站設(shè)計(jì)b站大全永不收費(fèi)2023入口在哪
  • 區(qū)塊鏈開(kāi)發(fā)是什么意思常德網(wǎng)站優(yōu)化公司
  • 江西省城鄉(xiāng)建設(shè)培訓(xùn)網(wǎng)-官方網(wǎng)站關(guān)鍵詞優(yōu)化簡(jiǎn)易
  • 網(wǎng)站建設(shè)價(jià)格標(biāo)準(zhǔn)報(bào)價(jià)軟件開(kāi)發(fā)交易平臺(tái)
  • 黃江做網(wǎng)站免費(fèi)男女打撲克的軟件
  • 手機(jī)wap網(wǎng)站的分析網(wǎng)絡(luò)營(yíng)銷官網(wǎng)
  • 贛州建網(wǎng)站手機(jī)seo排名