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} ?? ?}? ? }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- 6种方法初始化JAVA中的list集合
- Java中初始化List的5种方法示例
- Java初始化List方法代码实例
转载请注明出处:http://www.owntest.net/article/20230526/335117.html