关于List、Map、Stream初始化方式

目录

  • List、Map、Stream初始化
    • 第一种方法
    • 第二种方法(双括号初始化法/匿名内部类)
    • 有内存泄露隐患
  • List Stream 常用方法
    • 声明Student对象
    • Stream一些常用的API
【关于List、Map、Stream初始化方式】
List、Map、Stream初始化
第一种方法
初始化ListList list = new ArrayList(); list.add("string1"); list.add("string2"); list.add("stringN"); 初始化MapMap map = new HashMap(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("keyN", "valueN");


第二种方法(双括号初始化法/匿名内部类)
初始化ListList list = new ArrayList(){{add("string1"); add("string2"); add("stringN"); }}; 初始化MapMap map = new HashMap(){{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 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 setpublic Student(String name, Integer age, Integer math, Integer english) {super(); this.name = name; this.age = age; this.math = math; this.english = english; }@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", math=" + math + ", english=" + english + "]"; }}


Stream一些常用的API
public class StreamDemo {List list = null; //初始化数据@Beforepublic 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)); } @Testpublic void streamtest() {// filter 过滤器返回还是一个stream流对象//查询math成绩大于80的学生并遍历输出list.stream().filter(e->e.getMath()>80).forEach(System.out::println); //.forEach(e->System.out.println(e))//统计数量countSystem.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 映射元素可以对元素进行操作例如对每个学生年龄加1list.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 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()); //将流转未setlist.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}}}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读