關於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");
第二種方法(雙括號初始化法/匿名內部類)
初始化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"); }};
慎用, 非靜態內部類/ 匿名內部類包含瞭外圍實例的引用, 如果擁有比外部類更長的生命周期,
有內存泄露隱患
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的相互轉換方法初始化ArrayList,代碼如下:
ArrayList<String> list = new ArrayList(Arrays.asList("banana", "milk", "bacon"));
List Stream 常用方法
Stream 使用一種類似用 SQL 語句從數據庫查詢數據的直觀方式來提供一種對 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; //初始化數據 @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的學生並遍歷輸出 list.stream().filter(e->e.getMath()>80).forEach(System.out::println);//.forEach(e->System.out.println(e)) //統計數量count System.out.println(list.stream().count()); //如統計總分大於160的人數 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 去除重復數據 list.stream().distinct().forEach(System.out::println); //map 映射元素可以對元素進行操作 例如對每個學生年齡加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 返回最大值 查詢英語成績最高的學生 Student student2 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get(); //min 最小值 將上面l1,l2位置對調 Student student3 = list.stream().max((l1,l2)->l2.getEnglish().compareTo(l1.getEnglish())).get(); //將流對象轉為list list.stream().filter(e->e.getMath()>80).collect(Collectors.toList()); //將流轉未set list.stream().filter(e->e.getMath()>80).collect(Collectors.toSet()); //對對象中的某項進行統計 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} } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 關於JAVA8的 Stream學習
- 一篇文章帶你瞭解Java Stream流
- Java8 實現stream將對象集合list中抽取屬性集合轉化為map或list
- 手把手帶你瞭解Java-Stream流方法學習及總結
- java8如何根據某一屬性條件快速篩選list中的集合