1.Arrays.asList();
该方法是将数组转化成List集合的方法。
java.util.Arrays;
List<String> list = Arrays.asList(String [] s);
注意:参数是一个数组,返回集合,且该集合只能遍历,不能添加删除操作,会报错
参考:https://blog.csdn.net/kzadmxz/article/details/80394351
String is= "1,2,3,4";
List<String> sss = Arrays.asList(StrUtil.split(is, ","));
2.Java8中stream 流中的collect()方法
一个stream不可以使用两次
(1)获取集合中Bean的某个属性的集合(重复:list,不重复:set)—(map + collect用法)
Set<String> ids = list.stream().map(AdminUser::getPassword).collect(Collectors.toSet());
List<String> ids = list.stream().map(AdminUser::getPassword).collect(Collectors.toList());
参数解读:list:实体类集合List
AdminUser:实体类
getPassword:实体类中的get方法
/*调用String 方法*/
List<String> collect =list.stream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println(collect); //[A, B, C, D]
/*获取集合元素的倍数*/
List<Integer> num = Arrays.asList(1,2,3,4,5);
List<Integer> collect1 = num.stream().map(n -> n * 2).collect(Collectors.toList());
System.out.println(collect1); //[2, 4, 6, 8, 10]
3.Java8中stream 里面的 Collectors.toMap 用法
常用于list 转 map
Collectors.toMap 有三个重载方法:
toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper);
toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction);
toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier);
参数含义分别是:
keyMapper:Key 的映射函数
valueMapper:Value 的映射函数
mergeFunction:当 Key 冲突时,调用的合并方法
mapSupplier:Map 构造器,在需要返回特定的 Map 时使用
List<Person> list = new ArrayList();
list.add(new Person(1, "haha"));
list.add(new Person(2, "rere"));
list.add(new Person(3, "fefe"));
/*value是一个对象*/
Map<Integer, Person> mapp = list.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
或
Map<Integer, Person> mapp = list.stream().collect(Collectors.toMap(Person::getId, t->t));
输出:{1=test.Person@4b9385, 2=test.Person@1311334, 3=test.Person@2a0b20}
/*value是对象的某个属性*/
Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));
输出:{1=haha, 2=rere, 3=fefe}
当 Key 冲突时,调用的合并方法
List<Person> list = new ArrayList();
list.add(new Person(1, "haha"));
list.add(new Person(1, "rere"));
list.add(new Person(3, "fefe"));
Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(n1,n2)-> n1+n2));
输出:{1=haharere, 3=fefe}
当 Key 冲突时,自定义key
/*两个属性组合成key,映射对象*/
Map<Integer, String> map = list.stream().collect(Collectors.toMap(k->k.getId() + k.getName(),Function.identity());
输出:{1haha=test.Person@4b9385,2rere=test.Person@1311334, 3fefe=test.Person@2a0b20}
第四个参数(mapSupplier)用于自定义返回 Map 类型,比如我们希望返回的 Map 是根据 Key 排序的,可以使用如下写法:
Map<Integer, String> map =
list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(n1,n2)-> n1,TreeMap::new));
4.Java8中stream 里面的 Collectors.toSet 用法
//1.将数据收集进一个集合(Stream 转换为 Set,不允许重复值,没有顺序)
Stream<String> language = Stream.of("java", "python", "C++","php","java");
Set<String> setResult = language.collect(Collectors.toSet());
setResult.forEach(System.out::println);
5.Java8中stream 里面的 Collectors.toList 用法
//1.将数据收集进一个列表(Stream 转换为 List,允许重复值,有顺序)
//创建流
Stream<String> language = Stream.of("java", "python", "C++","php","java");
List<String> listResult = language.collect(Collectors.toList());
result.forEach(System.out::println);
//2.stream()代替流
List<String> list = Arrays.asList("java", "python", "C++","php","java");
List<String> listResult = list.stream().collect(Collectors.toList());
listResult.forEach(System.out::println);
6.Java8中stream 里面的 Collectors.toCollection 用法
List<String> list = Arrays.asList("java", "python", "C++","php","java");
//用LinkedList收集
List<String> linkedListResult = list.stream().collect(Collectors.toCollection(LinkedList::new));
linkedListResult.forEach(System.out::println);
//用CopyOnWriteArrayList收集
List<String> copyOnWriteArrayListResult =
list.stream().collect(Collectors.toCollection(CopyOnWriteArrayList::new));
copyOnWriteArrayListResult.forEach(System.out::println);
//用TreeSet收集
TreeSet<String> treeSetResult = list.stream().collect(Collectors.toCollection(TreeSet::new));
treeSetResult.forEach(System.out::println);
7.Java8中stream 里面的 Collectors.joining() 用法
List<String> list = Arrays.asList("java", "python", "C++","php","java");
//直接将输出结果拼接
System.out.println(list.stream().collect(Collectors.joining()));
//每个输出结果之间加拼接符号“|”
System.out.println(list.stream().collect(Collectors.joining(" | ")));
//输出结果开始头为Start--,结尾为--End,中间用拼接符号“||”
System.out.println(list.stream().collect(Collectors.joining(" || ", "Start--", "--End")));
输出:
javapythonC++phpjava
java | python | C++ | php | java
Start--java || python || C++ || php || java--End
8.Java8中stream 里面的 filter 用法
顾名思义–过滤器的作用 stream.filter(对象限制条件);
例如:
//查询出sysOrgId是100的集合。
List<VehicleInfo> vehicleInfos = list.stream().filter(a ->100==a.getSysOrgId()).collect(Collectors.toList());
Optional<User> user = list.stream().filter(a ->100==a.getId()).findFirst();
//判断user是不是空的
if (user.isPresent()) {
//把optional的值给实体类
User u = user.get();
System.out.println(u);
}
/*Optional:可能包含也可能不包含非空值的容器对象。*/
Optional.isPresent();//是否存在值,返回booleal
Optional.get();//获取值
Optional.orElse(T other)//如果值为null,返回other
Optional.findFirst();//查询出符合filter条件的第一个,返回值是Optional类型
Optional.forEach();//遍历操作
9.Java8中stream 里面的 match用法
match()是filter()的缩写版本,返回结果只有boolean类型,返回是否匹配。
allMatch:Stream 中全部元素符合传入的 predicate,返回 true
anyMatch:Stream 中只要有一个元素符合传入的 predicate,返回 true
noneMatch:Stream 中没有一个元素符合传入的 predicate,返回 true
它们都不是要遍历全部元素才能返回结果。例如 allMatch 只要一个元素不满足条件,就 skip 剩下的所有元素,返回 false。
boolean flag = demos.stream()
.map(Demo::getName)
.filter(condition::contains)
.findAny()
.isPresent();
/*这两个效果一致*/
boolean flag = demos.stream()
.map(Demo::getName)
.anyMatch(condition::contains);
10.Java8中stream 里面的 reduce用法
常用语字符串拼接和数值运算
// reduce用例
// 字符串连接,concat = "ABCD"
String concat = Stream.of("A", "B", "C", "D").reduce("", String::concat);
// 求最小值,minValue = -3.0
double minValue = Stream.of(-1.5, 1.0, -3.0, -2.0).reduce(Double.MAX_VALUE, Double::min);
// 求和,sumValue = 10, 有起始值
int sumValue = Stream.of(1, 2, 3, 4).reduce(0, Integer::sum);
// 求和,sumValue = 10, 无起始值,返回Optional,所以有get()方法
sumValue = Stream.of(1, 2, 3, 4).reduce(Integer::sum).get();
// 过滤,字符串连接,concat = "ace"
concat = Stream.of("a", "B", "c", "D", "e", "F")
.filter(x -> x.compareTo("Z") > 0)
.reduce("", String::concat);
11.Java8中stream 里面用 Collectors 来进行 reduction 操作
groupingBy/partitioningBy 用法
/*按照Bean某个属性归组*/
Map<Integer, List<Person>> personGroups =list.stream().collect(Collectors.groupingBy(Person::getAge));
/*只有两个分组 true & false*/
Map<Boolean, List<Person>> children = list.stream().collect(Collectors.partitioningBy(p -> p.getAge() < 18));
System.out.println("Children number: " + children.get(true).size());
System.out.println("Adult number: " + children.get(false).size());
//结果
Children number: 23
Adult number: 77