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

目录
  • List、Map、Stream初始化
    • 第一种方法
    • 第二种方法(双括号初始化法/匿名内部类)
    • 有内存泄露隐患
  • List Stream 常用方法
    • 声明Student对象
    • Stream一些常用的API

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}
    }   
}

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

(0)

相关推荐

  • Java中初始化List的5种方法示例

    前言 List是java重要的数据结构之一,我们经常接触到的有ArrayList.Vector和LinkedList三种,他们都继承来自java.util.Collection接口,类图如下 Java 中经常需要使用到 List,下面简单介绍几种常见的初始化方式. 1.构造 List 后使用 List.add 初始化 这是最常规的做法,用起来不太方便. 2.使用 {{}} 双括号语法 这种方式相对方便了一些. 外层的{}定义了一个 LinkedList 的匿名内部类.内层的{}的定义了一个实例初

  • 6种方法初始化JAVA中的list集合

    List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下. 1.常规方式 List<String> languages = new ArrayList<>(); languages.add("Java"); languages.add("PHP"); languages.add("Python"); System.out.println

  • Java初始化List方法代码实例

    List指的是集合.<>是泛型,里面指定了这个集合中存放的是什么数据. 比如有一个学生类Student,Student里面包含了学生的一些信息.这样每一个Student对象就代表了一个学生.此时List<Student>就代表这个集合中存放了很多个学生对象,这个集合就像一个班级一样. 第一种 /** * 第一种方式 * 常规方式 */ @Test public void one(){ List<String> languages = new ArrayList<&

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

    目录 List.Map.Stream初始化 第一种方法 第二种方法(双括号初始化法/匿名内部类) 有内存泄露隐患 List Stream 常用方法 声明Student对象 Stream一些常用的API List.Map.Stream初始化 第一种方法      初始化List      List<string> list = new ArrayList<string><string>();        list.add("string1");  

  • Go map定义的方式及修改技巧

    直入正题,我们看下以下代码: package main import ( "encoding/json" "fmt") func main() { //第一种声明 var language map[string]string language = make(map[string]string, 10) //在使用map前,需要先make,make的作用就是给map分配数据空间 language["1"] = "C#" lang

  • C++中各种初始化方式示例详解

    前言 本文主要给大家介绍了关于C++初始化方式的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. C++小实验测试:下面程序中main函数里a.a和b.b的输出值是多少? #include <iostream> struct foo { foo() = default; int a; }; struct bar { bar(); int b; }; bar::bar() = default; int main() { foo a{}; bar b{}; std::co

  • keras之权重初始化方式

    在神经网络训练中,好的权重 初始化会加速训练过程. 下面说一下kernel_initializer 权重初始化的方法. 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是kernel_initializer 和 bias_initializer model.add(Dense(64, kernel_initializer=initializers.random_normal(stddev=0.01))) # also works; will use the defau

  • Java 数组的两种初始化方式

    一.数组 1.数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标,就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就可以快速计算出要查找元素的内存地址.通过内存地址快速定位该元素,所以数组查找元素的效率较高. 2.随机的对数组进行增删元素,当增加元素的时候,为了保证数组中元素在空间存储上是有序的,所以被添加元素位置后面的所有元素都要向后移动,删除元素也是,后面所有的元素要向前移动,所以数组的增删元素​效率很低.

  • Java遍历Map四种方式讲解

    Java中遍历Map的四种方式 在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方式去遍历. 方法一:在for循环中使用entries实现Map的遍历: /** * 最常见也是大多数情况下用的最多的,一般在键值对都需要使用 */ Map <String,String>map = new HashMap<String,String>(); map.put("

  • Java Boolean 初始化方式详解

    Java Boolean 初始化方式 1.Boolean(String boolString); 以字符串的方式初始化,只有当字符串是"true"(不区分大小写,也可以是tRue之类的)的时候是true:其他的字符串来完成初始化都是false. Boolean dpBoolean = new Boolean("ok"); System.out.println(dpBoolean); 结果:false Boolean dpBoolean = new Boolean(&

  • react中使用forEach或map两种方式遍历数组

    目录 使用forEach或map两种方式遍历数组 forEach map 循环遍历数组时map和forEach的区别 forEach情况 map 情况 使用forEach或map两种方式遍历数组 之前写代码,从后台提取数据并渲染到前台,由于有多组数据,用map遍历会相对方便一点,但是 map不能遍历array数组,只能遍历object对象. 所以如果遇到这样的问题可以采用forEach试一下 forEach import React,{Component} from 'react'; let l

  • go slice不同初始化方式性能及数组比较详解

    目录 正文 各种场景代码 使用benchmark测试 正文 go语言开发中,slice是我们常用的数据类型之一,也是因为它的灵活性,自己也很少使用数组,当然我也知道它的一些特性,不过没有真实的去验证它,因为大多数使用场景没必要对code太过苛刻,但是如果封装作为包为其他逻辑提供使用的时候,我觉得还是要在意这些事的,毕竟作为公共包使用时,也就证明了使用的频率的频繁性.那么有些事还是指的记录一下,上周闲来无事跑一下吧,今天做一下记录 各种场景代码 其实我们也都知道slice的底层逻辑是一个动态数组,

  • Java与Scala创建List与Map的实现方式

    目录 Java与Scala创建List与Map Java自定义map与scala map对比 1. 背景 2. java代码 Java与Scala创建List与Map //Java List<String> languages = new ArrayList<>(); Map<String, Class> mapFields = new HashMap(); //Scala val languages = new util.ArrayList[String] val m

随机推荐