Details Explanation of Java Stream
注意
wsl和本地上用IDEA运行java代码,最新修改的结果往往都无法被正常运行出来,我推测是缓存没有及时刷新之类的。有两个解决办法:
- 每次运行前按下快捷键:ctrl + shift + f9,达到rebuild project的目的
- 手动点击上边栏,选择build-rebuild project,选择build project没有作用
根据这个帖子,要彻底解决这个问题,恐怕要更新到2024.1以后的版本,我暂时不要更新自己的IDEA,因为当前的IDEA还能够正常使用,而我使用的是破解版的密钥,贸然更新可能会导致反而无法正常使用的情况出现。
不可变集合详解
创建不可变集合
不可变集合:不可以被修改的集合。其长度和内容都不可以被修改。
创建不可变集合的应用场景:
- 如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。
- 当集合对象被不可信的库调用时,不可变形式是安全的。
- 某些确定的规则。
- 电脑中的硬件信息。
简单理解:不想让别人修改集合中的内容,就可以给他提供一个不可变的集合。拿到不可变集合的人只能做查询操作,不能删除、修改、添加。
创建不可变集合的书写格式:
在List, Set, Map接口中,都存在静态的of方法,可以获取一个不可变的集合。
| 方法名称 | 说明 |
| :————————————————————: | :————————————————: |
| static <E> List<E> of(E...elements)
| 创建一个具有指定元素的List集合对象 |
| static <E> Set<E> of(E...elements)
| 创建一个具有指定元素的Set集合对象 |
| static <K, V> Map<K, V> of(E...elements)
| 创建一个具有指定元素的Map集合对象 |
List of
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| package com.cyf.a01immutable;
import java.util.Iterator; import java.util.List;
public class ImmutableDemo1 { public static void main(String[] args) {
List<String> list = List.of("张三", "李四", "王五", "赵六");
System.out.println(list.get(0)); System.out.println(list.get(1)); System.out.println(list.get(2)); System.out.println(list.get(3));
System.out.println("-----------------------------");
for (String s : list) { System.out.println(s); }
System.out.println("-----------------------------");
Iterator<String> it = list.iterator(); while (it.hasNext()) { String s = it.next(); System.out.println(s); }
System.out.println("-----------------------------");
for (int i = 0; i < list.size(); i++) { String s = list.get(i); System.out.println(s); }
System.out.println("-----------------------------");
} }
|
Set of
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| package com.cyf.a01immutable;
import java.util.Iterator; import java.util.Set;
public class ImmutableDemo2 { public static void main(String[] args) {
Set<String> set = Set.of("张三", "李四", "王五", "赵六");
for (String s : set) { System.out.println(s); }
System.out.println("-----------------------------");
Iterator<String> it = set.iterator(); while(it.hasNext()) { String s = it.next(); System.out.println(s); }
System.out.println("-----------------------------");
} }
|
Map.of
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| package com.cyf.a01immutable;
import java.util.Map; import java.util.Set;
public class ImmutableDemo3 { public static void main(String[] args) {
Map<String, String> map = Map.of( "张三", "南京", "李四", "北京", "王五", "上海", "赵六", "广州", "孙七", "深圳", "周八", "杭州", "吴九", "宁波", "郑十", "苏州", "刘一", "无锡", "陈二", "嘉兴");
Set<String> keys = map.keySet(); for (String key : keys) { String value = map.get(key); System.out.println(key + "=" + value); }
System.out.println("-----------------------------");
Set<Map.Entry<String, String>> entries = map.entrySet(); for (Map.Entry<String, String> entry : entries) { String key = entry.getKey(); String value = entry.getValue(); System.out.println(key + "=" + value); }
System.out.println("-----------------------------"); }
}
|
Map.ofEntries
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| package com.cyf.a01immutable;
import java.util.HashMap; import java.util.Map; import java.util.Set;
public class ImmutableDemo4 { public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<>(); hm.put("张三", "南京"); hm.put("李四", "北京"); hm.put("王五", "上海"); hm.put("赵六", "广州"); hm.put("孙七", "深圳"); hm.put("周八", "杭州"); hm.put("吴九", "宁波"); hm.put("郑十", "苏州"); hm.put("刘一", "无锡"); hm.put("陈二", "嘉兴"); hm.put("aaa", "111");
Set<Map.Entry<String, String>> entries = hm.entrySet(); Map.Entry[] arr1 = new Map.Entry[0]; Map.Entry[] arr2 = entries.toArray(arr1);
Map map = Map.ofEntries(arr2);
} }
|
上面的代码非常麻烦,可以简化。
Stream流
方法引用
初爽Stream流
Stream流的思想和获取Stream流