關(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í)例的引用, 如果擁有比外部類更長(zhǎng)的生命周期,
有內(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 語(yǔ)句從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)的直觀方式來(lái)提供一種對(duì) Java 集合運(yùn)算和表達(dá)的高階抽象(菜鳥(niǎo)教程)。這里的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 過(guò)濾器返回還是一個(gè)stream流對(duì)象 ?? ??? ?//查詢math成績(jī)大于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 跳過(guò)前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 是否匹配任意一元素 ?檢查是否包含名字為T(mén)om的 ?? ??? ?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 返回最大值 查詢英語(yǔ)成績(jī)最高的學(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及問(wèn)題解決
- Java8 實(shí)現(xiàn)stream將對(duì)象集合list中抽取屬性集合轉(zhuǎn)化為map或list
- JDK8通過(guò)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ò)的問(wèn)題
- Java8 中使用Stream 讓List 轉(zhuǎn) Map使用問(wèn)題小結(jié)
- Java中List使用stream流轉(zhuǎn)成map的幾種方式詳解
相關(guān)文章
Java微信公眾平臺(tái)開(kāi)發(fā)(15) 微信JSSDK的使用
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開(kā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開(kāi)發(fā)中,我們常常用到繼承這一概念,可以說(shuō)繼承是Java這類面向?qū)ο缶幊陶Z(yǔ)言的基石,今天小編一起和大家一起學(xué)習(xí)java類的繼承2017-04-04Java中Arrays工具類的一些常見(jiàn)方法總結(jié)
在Java中Arrays類是一個(gè)實(shí)用工具類,用于在數(shù)組上執(zhí)行各種操作,包括排序、搜索、比較等,這篇文章主要給大家介紹了關(guān)于Java中Arrays工具類的一些常見(jiàn)方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02Mybatis步驟分解實(shí)現(xiàn)一個(gè)增刪改查程序
MybatisPlus是國(guó)產(chǎn)的第三方插件, 它封裝了許多常用的CURDapi,免去了我們寫(xiě)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