關(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"); ?第二種方法(雙括號初始化法/匿名內(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)部類包含了外圍實例的引用, 如果擁有比外部類更長的生命周期,
有內(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ù)的直觀方式來提供一種對 Java 集合運算和表達的高階抽象(菜鳥教程)。這里的Stream不同于IO中的stream。
聲明Student對象
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 過濾器返回還是一個stream流對象
?? ??? ?//查詢math成績大于80的學(xué)生并遍歷輸出
?? ??? ?list.stream().filter(e->e.getMath()>80).forEach(System.out::println);//.forEach(e->System.out.println(e))
?? ??? ?//統(tǒng)計數(shù)量count
?? ??? ?System.out.println(list.stream().count());
?? ??? ?//如統(tǒng)計總分大于160的人數(shù)
?? ??? ?System.out.println(list.stream().filter(e->e.getEnglish()+e.getMath()>160).count());
?? ??? ?//limit ?取前n個值
?? ??? ?list.stream().limit(3).forEach(System.out::println);
?? ??? ?//skip 跳過前n個
?? ??? ?list.stream().skip(2).forEach(System.out::println);
?? ??? ?//distinct 去除重復(fù)數(shù)據(jù)
?? ??? ?list.stream().distinct().forEach(System.out::println);
?? ??? ?//map 映射元素可以對元素進行操作 ? 例如對每個學(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());
?? ??? ?});
?? ??? ?//返回第一個元素 ?
?? ??? ?Optional<Student> first = list.stream().findFirst();
?? ??? ?System.out.println(first.get());
?? ??? ?//返回任意一個元素
?? ??? ?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 返回元素中第一個值
?? ??? ?Student student = list.stream().findFirst().get();
?? ??? ?//findAny 返回元素中任意一個值
?? ??? ?Student student1 = list.stream().findAny().get();
?? ??? ?//max 返回最大值 查詢英語成績最高的學(xué)生
?? ??? ?Student student2 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get();
?? ??? ?//min 最小值 ?將上面l1,l2位置對調(diào)
?? ??? ?Student student3 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get();
?? ??? ?//將流對象轉(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());
?? ??? ?//對對象中的某項進行統(tǒng)計
?? ??? ?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}
?? ?}? ?
}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決
- Java8 實現(xiàn)stream將對象集合list中抽取屬性集合轉(zhuǎn)化為map或list
- JDK8通過Stream 對List,Map操作和互轉(zhuǎn)的實現(xiàn)
- java8 Stream list to Map key 重復(fù) value合并到Collectio的操作
- 解決使用stream將list轉(zhuǎn)map時,key重復(fù)導(dǎo)致報錯的問題
- Java8 中使用Stream 讓List 轉(zhuǎn) Map使用問題小結(jié)
- Java中List使用stream流轉(zhuǎn)成map的幾種方式詳解
相關(guān)文章
Java微信公眾平臺開發(fā)(15) 微信JSSDK的使用
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺開發(fā)第十五步,微信JSSDK的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
springMVC配置環(huán)境實現(xiàn)文件上傳和下載
這篇文章主要為大家詳細(xì)介紹了springMVC配置環(huán)境實現(xiàn)文件上傳和下載的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-05-05
Java類的繼承實例詳解(動力節(jié)點Java學(xué)院整理)
在Java開發(fā)中,我們常常用到繼承這一概念,可以說繼承是Java這類面向?qū)ο缶幊陶Z言的基石,今天小編一起和大家一起學(xué)習(xí)java類的繼承2017-04-04
java同步器AQS架構(gòu)AbstractQueuedSynchronizer原理解析
這篇文章主要為大家介紹了java同步器AQS架構(gòu)AbstractQueuedSynchronizer的底層原理及源碼解析,有需要的朋友可以借鑒參考下,希望能有所幫助,祝大家多多進步早日升職加薪2022-03-03

