1.List.addAll():添加所有元素到列表中
1. 将指定的元素转为集合
List
2. 比较两个集合所含元素是否相同
List strings = List.of("a", "bb", "cc", "ddd");
List strings2 = List.of("a", "bb", "cc","ddd");
boolean equals = List.equals(strings, strings2);
System.out.println(equals); //true
3.过滤掉集合里某个元素
List
System.out.println(list1.toString()); // bb,cc,ddd
4. 将list转为指定类型, 方法里面用的instance of进行判断
List strings = List.of("a", "bb", "cc", "ddd");
List convert = List.convert(String.class, strings);
System.out.println(convert);
1. Collections.unmodifiable*() 将list/map转换为不可变的
List strings = List.of("a", "bb", "cc", "ddd");
LinkedHashMap> collect1 = strings.stream().collect(groupingBy(String::length, LinkedHashMap::new, toCollection(TreeSet::new)));
Map> integerTreeSetMap = Collections.unmodifiableMap(collect1);
integerTreeSetMap.put(1,null); // 报java.lang.UnsupportedOperationException
2.Collections.enumeration 获取一个枚举集合
List list = new ArrayList();
list.add("aa");
Enumeration enumeration = Collections.enumeration(list);
1. 并行流下,按顺序执行 forEachOrdered()
//输出的顺序不一定(效率更高)
Stream.of("AAA", "BBB", "CCC").parallel().forEach(s -> System.out.println("Output:" + s));
//输出的顺序与元素的顺序严格一致
Stream.of("AAA", "BBB", "CCC").parallel().forEachOrdered(s -> System.out.println("Output:" + s));
2.转成数组 toArray()
Person[] men = people.stream()
.filter(p -> p.getGender() == MALE)
.toArray(Person[]::new);
3. collect 收集
List strings = List.of("a", "bb", "cc", "ddd");
ArrayList
ArrayList::new 一个创建新结果容器的函数
ArrayList::add 一个累加器
ArrayList::addAll 组合器,组合两个值的函数
4. java.util.stream.Collectors 下 mapping()
Collector mapping(Function super T, ? extends U> mapper,
Collector super U, A, R> downstream)
第一个参数mapper :一个要应用于输入元素的函数映射器
第二个参数downstream : 收集器,将接受映射的值
List list = List.of("1", "2", "3", "4");
java.util.List collect4 = strings.stream().collect(mapping(Integer::parseInt, toList()));
这个mapping()跟stream.map() 功能一样,只是maping()是作用于收集器里面的,map()是作用在流里面
应用的场景还挺多的,java8注释上举了个例子,你在grouping by之后,怎么将收集的集合映射成另一个集合,这里就用mapping
Map> namesByCity
= people.stream().collect(groupingBy(Person::getCity,
mapping(Person::getLastName, toSet())));
5. java.util.stream.Collectors 下 counting()
counting() { return reducing(0L, e -> 1L, Long::sum); }
看下他的方法实现,用了个Long::sum的映射函数,如果你想得到一个int的累加结果,就
用 reducing(0,a->1, Integer::sum)就行了
6. predict() 谓词
可以给谓词添加一个谓词链
List> allPredicates = new ArrayList<>();
allPredicates.add(str -> str.startsWith("A"));
allPredicates.add(str -> str.contains("d"));
allPredicates.add(str -> str.length() > 4);
Stream stringStream = Stream.of("Ad123","qqq","a");
List result =stringStream
// 给一个归约初始的值 true
.filter(allPredicates.stream().reduce(x->true, Predicate::and))
.collect(Collectors.toList());
System.out.println(result);
7. java.util.stream.Collectors 下 toMap()
java8注释举的例子:
Map studentIdToStudent =
students.stream().collect(toMap(Student::getId,
Functions.identity());
Functions.identity() 就是个函数接口默认的实现,用lamda表示就是 a->a