1. 程式人生 > 其它 >list轉map stream_advancedday10可變引數不可變集合及Stream流

list轉map stream_advancedday10可變引數不可變集合及Stream流

技術標籤:list轉map streamstream map方法stream()獲取重複的值stream流stream獲取list中的某個元素集合獲取list集合中某一元素的值

可變引數

可變引數指的是,方法引數的個數可以發生改變。但是其本質是一個數組,在方法把可變引數當做陣列來使用就可以了。

//可變引數的格式:資料型別...引數名public static void 方法名(資料型別... 引數名){  ...}

求多個整數的和,程式碼如下

public static void main(String[] args){ getSum(1,2,3,4,5); //15 getSum(1,2,3); //6  int[] array={1,2,3,4,5}; getSum(array); //15}//求多個整數的和public static void getSum(int... array){    int sum=0; for(int i=0;i<array.length;i++){  sum+=array[i];  } System.out.println("所有整數的和為:"+sum);}

建立不可變的集合

//建立List集合,並新增元素List<元素型別> list= List.of(元素1,元素2....);//建立Set集合,並新增元素Set<元素型別> set = Set.of(元素1,元素2....);//建立Map集合,並新增元素Map<鍵的型別,值的型別> map = Map.of(鍵1,值1,鍵2,值2);Map<鍵的型別,值的型別> map = Map.ofEntries(Map.entry(鍵1,值1),Map.entry(鍵2,值2));

Stream流

Stream流指的是流式程式設計,可以讓我們操作集合或者陣列的時候更加方便。

Stream流的操作步驟

f35ae01e07fc9714c576209c9ef75459.png

獲取流操作

//單列集合獲取流Stream<元素型別> s1 = 集合名.stream();//雙列集合獲取流Stream<鍵的型別> s2 = map.keySet().stream();Stream<值的型別> s3 = map.values().stream();Stream<鍵值對的型別> s5 = map.entrySet().stream();//陣列獲取流Stream<元素型別> s6 = Arrays.stream(陣列名);//多個數據獲取流Stream<元素型別> s7 = Stream.of(元素1,元素2...);

轉換流操作

fliter: 對流中的元素進行過濾limit: 擷取前面的n個元素skip: 跳過前面的n個元素concat: 合併兩個流物件    Stream s = Stream.concat(流1,流2);distinct: 去重重複元素    如果元素的hashCode和euqals判斷都相同,才認為元素重複

終結操作

forEach: 遍歷元素count: 元素個數collect: 把流中的元素收集到集合中        Collectors.toList(); //轉換為List集合        Collectors.toSet(); //轉換為Set集合        Collectors.toMap(                lambda表示式1, //返回鍵                lambda表示式2, //返回值        ); //轉換為Map集合

Stream流練習

ArrayList<String> list1=new ArrayList<>();list1.add("楊過");list1.add("楊簡");list1.add("張三丰");list1.add("張無忌");list1.add("劉德華");ArrayList<String> list2=new ArrayList<>();list2.add("楊冪");list2.add("楊紫");list2.add("劉曼");list2.add("黃晶");list2.add("張柏芝");list2.add("張曼玉");//1.獲取男演員的三個字的姓名,擷取前面前面2個Stream<String> s1 = list1.stream().filter(s -> s.length() == 3).limit(2);//2.獲取女演員的兩個字的姓名, 跳過前面1個Stream<String> s2 = list2.stream().filter(s -> s.length() == 2).skip(1);//3.把男演員和女演員合併Stream<String> s3 = Stream.concat(s1, s2);//4.把剩下的所有姓名,封裝為Actor物件s3.forEach(s-> System.out.println(new Actor(s)));