關(guān)于List、Map、Stream初始化方式
List、Map、Stream初始化
第一種方法
? ? ?初始化List ? ? ?List<string> list = new ArrayList<string><string>(); ? ? ? ?list.add("string1"); ? ? ? ?list.add("string2"); ? ? ? ?list.add("stringN"); ? ? ?? ? ? ?初始化Map ? ? ?Map</String , Object> map = new HashMap</String , Object>(); ? ? ? ?map.put("key1", "value1"); ? ? ? ?map.put("key2", "value2"); ? ? ? ?map.put("keyN", "valueN"); ?
第二種方法(雙括號(hào)初始化法/匿名內(nèi)部類)
? ? ?初始化List ?? ? ? ?List<string> list = new ArrayList<string>(){{ ? ? ? ?add("string1"); ? ? ? ?add("string2"); ? ? ? ?add("stringN"); ? ?}}; ? ? ? ? ? ? ?初始化Map ? ? ? ? ?Map</String , String> map = new HashMap</String , Object>(){{ ? ? ? ?put("keyOne", "valueOne"); ? ? ? ?put("keyTwo", "valueTwo"); ? ? ? ?put("keyThree", "valueThree"); ?? ? ? ?}};
慎用, 非靜態(tài)內(nèi)部類/ 匿名內(nèi)部類包含了外圍實(shí)例的引用, 如果擁有比外部類更長的生命周期,
有內(nèi)存泄露隱患
stream初始化
? ? ?Map map = Stream.of(1,2,3,4).collect( ? ? ?Collectors.toMap(x -> x, integer -> integer,(key, value) -> value, HashMap::new)); ? ? ?System.out.println(JSONObject.toJSONString(map)); ? ?? ? ? ?List list = Stream.of(1,2,3,4).collect(Collectors.toList()); ? ? ?System.out.println(JSONObject.toJSONString(list));
利用Array與ArrayList的相互轉(zhuǎn)換方法初始化ArrayList,代碼如下:
ArrayList<String> list = new ArrayList(Arrays.asList("banana", "milk", "bacon")); ?
List Stream 常用方法
Stream 使用一種類似用 SQL 語句從數(shù)據(jù)庫查詢數(shù)據(jù)的直觀方式來提供一種對(duì) Java 集合運(yùn)算和表達(dá)的高階抽象(菜鳥教程)。這里的Stream不同于IO中的stream。
聲明Student對(duì)象
public class Student { ?? ?private String name; ?? ?private Integer age; ?? ?private Integer math; ?? ?private Integer english; ?? ?//get set ?? ?public Student(String name, Integer age, Integer math, Integer english) { ?? ??? ?super(); ?? ??? ?this.name = name; ?? ??? ?this.age = age; ?? ??? ?this.math = math; ?? ??? ?this.english = english; ?? ?} ?? ?@Override ?? ?public String toString() { ?? ??? ?return "Student [name=" + name + ", age=" + age + ", math=" + math + ", english=" + english + "]"; ?? ?} }
Stream一些常用的API
public class StreamDemo { ?? ?List<Student> list = null; ? ? //初始化數(shù)據(jù) ?? ?@Before ?? ?public void beforetest() { ?? ??? ?list = Arrays.asList(new Student("Tom", 18, 88, 90), new Student("Jerry", 20, 77, 89), ?? ??? ??? ??? ?new Student("Lily", 17, 98, 79), new Student("Lucy", 19, 70, 80), new Student("LiLei", 18, 88, 90), ?? ??? ??? ??? ?new Student("HanMeiMei", 21, 87, 79)); ?? ?}? ?? ? ?? ?@Test ?? ?public void streamtest() { ?? ??? ?// filter 過濾器返回還是一個(gè)stream流對(duì)象 ?? ??? ?//查詢math成績大于80的學(xué)生并遍歷輸出 ?? ??? ?list.stream().filter(e->e.getMath()>80).forEach(System.out::println);//.forEach(e->System.out.println(e)) ?? ??? ?//統(tǒng)計(jì)數(shù)量count ?? ??? ?System.out.println(list.stream().count()); ?? ??? ?//如統(tǒng)計(jì)總分大于160的人數(shù) ?? ??? ?System.out.println(list.stream().filter(e->e.getEnglish()+e.getMath()>160).count()); ?? ??? ?//limit ?取前n個(gè)值 ?? ??? ?list.stream().limit(3).forEach(System.out::println); ?? ??? ?//skip 跳過前n個(gè) ?? ??? ?list.stream().skip(2).forEach(System.out::println); ?? ??? ?//distinct 去除重復(fù)數(shù)據(jù) ?? ??? ?list.stream().distinct().forEach(System.out::println); ?? ??? ?//map 映射元素可以對(duì)元素進(jìn)行操作 ? 例如對(duì)每個(gè)學(xué)生年齡加1 ?? ??? ?list.stream().map(e->{ ?? ??? ??? ?e.setAge(e.getAge()+1); ?? ??? ??? ?return e; ?? ??? ?}).forEach(System.out::println); ?? ??? ?//sorted 排序? ?? ??? ?//升序 ?? ??? ?list.stream().sorted((a,b)->{ ?? ??? ??? ?return a.getEnglish().compareTo(b.getEnglish()); ?? ??? ?}); ?? ??? ?//降序 ?? ??? ?list.stream().sorted((a,b)->{ ?? ??? ??? ?return b.getEnglish().compareTo(a.getEnglish()); ?? ??? ?}); ?? ??? ?//返回第一個(gè)元素 ? ?? ??? ?Optional<Student> first = list.stream().findFirst(); ?? ??? ?System.out.println(first.get()); ?? ??? ?//返回任意一個(gè)元素 ?? ??? ?System.out.println(list.stream().findAny().get()); ?? ??? ?//anyMatch 是否匹配任意一元素 ?檢查是否包含名字為Tom的 ?? ??? ?System.out.println(list.stream().anyMatch(e->e.getName().equals("Tom"))); ?? ??? ?//allMatch 是否匹配所有元素 ?? ??? ?System.out.println(list.stream().allMatch(e->e.getName().equals("Tom"))); ?? ??? ?//noneMatch ?是否未匹配所有元素 ?? ??? ?System.out.println(list.stream().noneMatch(e->e.getName().equals("Tom"))); ?? ??? ?//findFirst 返回元素中第一個(gè)值 ?? ??? ?Student student = list.stream().findFirst().get(); ?? ??? ?//findAny 返回元素中任意一個(gè)值 ?? ??? ?Student student1 = list.stream().findAny().get(); ?? ??? ?//max 返回最大值 查詢英語成績最高的學(xué)生 ?? ??? ?Student student2 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get(); ?? ??? ?//min 最小值 ?將上面l1,l2位置對(duì)調(diào) ?? ??? ?Student student3 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get(); ?? ??? ?//將流對(duì)象轉(zhuǎn)為list? ?? ??? ?list.stream().filter(e->e.getMath()>80).collect(Collectors.toList()); ?? ??? ?//將流轉(zhuǎn)未set ?? ??? ?list.stream().filter(e->e.getMath()>80).collect(Collectors.toSet()); ?? ??? ?//對(duì)對(duì)象中的某項(xiàng)進(jìn)行統(tǒng)計(jì) ?? ??? ?IntSummaryStatistics c = list.stream().collect(Collectors.summarizingInt(Student::getEnglish)); ?? ??? ?System.out.println(c);//IntSummaryStatistics{count=6, sum=507, min=79, average=84.500000, max=90} ?? ?}? ? }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決
- Java8 實(shí)現(xiàn)stream將對(duì)象集合list中抽取屬性集合轉(zhuǎn)化為map或list
- JDK8通過Stream 對(duì)List,Map操作和互轉(zhuǎn)的實(shí)現(xiàn)
- java8 Stream list to Map key 重復(fù) value合并到Collectio的操作
- 解決使用stream將list轉(zhuǎn)map時(shí),key重復(fù)導(dǎo)致報(bào)錯(cuò)的問題
- Java8 中使用Stream 讓List 轉(zhuǎn) Map使用問題小結(jié)
- Java中List使用stream流轉(zhuǎn)成map的幾種方式詳解
相關(guān)文章
Java微信公眾平臺(tái)開發(fā)(15) 微信JSSDK的使用
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開發(fā)第十五步,微信JSSDK的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04springMVC配置環(huán)境實(shí)現(xiàn)文件上傳和下載
這篇文章主要為大家詳細(xì)介紹了springMVC配置環(huán)境實(shí)現(xiàn)文件上傳和下載的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05Java類的繼承實(shí)例詳解(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
在Java開發(fā)中,我們常常用到繼承這一概念,可以說繼承是Java這類面向?qū)ο缶幊陶Z言的基石,今天小編一起和大家一起學(xué)習(xí)java類的繼承2017-04-04Mybatis步驟分解實(shí)現(xiàn)一個(gè)增刪改查程序
MybatisPlus是國產(chǎn)的第三方插件, 它封裝了許多常用的CURDapi,免去了我們寫mapper.xml的重復(fù)勞動(dòng)。本文將整合MybatisPlus實(shí)現(xiàn)增刪改查功能,感興趣的可以了解一下2022-05-05java同步器AQS架構(gòu)AbstractQueuedSynchronizer原理解析
這篇文章主要為大家介紹了java同步器AQS架構(gòu)AbstractQueuedSynchronizer的底層原理及源碼解析,有需要的朋友可以借鑒參考下,希望能有所幫助,祝大家多多進(jìn)步早日升職加薪2022-03-03