1.forEach循环
list.forEach(item -> {
});
1.foreach的实现基于Iterator;
2.不能使用foreach对数组或容器进行赋值;
3.可以使用foreach修改数组或容器的对象的属性;
4.赋值行为尽量使用for循环。
2.java8 stream list转map及问题解决
3.java8 stream 集合取交集、并集、差集、去重并集
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("5");
list1.add("6");
List<String> list2 = new ArrayList<String>();
list2.add("2");
list2.add("3");
list2.add("7");
list2.add("8");
// 交集
List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(toList());
System.out.println("---交集 intersection---");
intersection.parallelStream().forEach(System.out :: println);
// 差集 (list1 - list2)
List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(toList());
System.out.println("---差集 reduce1 (list1 - list2)---");
reduce1.parallelStream().forEach(System.out :: println);
// 差集 (list2 - list1)
List<String> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(toList());
System.out.println("---差集 reduce2 (list2 - list1)---");
reduce2.parallelStream().forEach(System.out :: println);
// 并集
List<String> listAll = list1.parallelStream().collect(toList());
List<String> listAll2 = list2.parallelStream().collect(toList());
listAll.addAll(listAll2);
System.out.println("---并集 listAll---");
listAll.parallelStream().forEachOrdered(System.out :: println);
// 去重并集
List<String> listAllDistinct = listAll.stream().distinct().collect(toList());
System.out.println("---得到去重并集 listAllDistinct---");
listAllDistinct.parallelStream().forEachOrdered(System.out :: println);
System.out.println("---原来的List1---");
list1.parallelStream().forEachOrdered(System.out :: println);
System.out.println("---原来的List2---");
list2.parallelStream().forEachOrdered(System.out :: println);
//合并去重
List<String> list3= Stream.of(list2, list22).flatMap(Collection::stream).distinct()
.collect(Collectors.toList());
System.out.println("---合并去重的List3---");
}
4.java8 stream 检查list集合中是否存在某个值
list.stream().filter(m->m.getName().equals("B")).findAny().isPresent();
//如果有返回true
5.java8 stream 过滤
List<Test> v = list.stream().filter(item -> "B".equals(item.getName())
&& "02".equals(item.getId())).collect(Collectors.toList());
System.out.println("list:" + v.get(0).getName());
6.java8 stream 分组
//按 id+name 分组
Map<Test, List<Test>> lMap = list.stream().
collect(Collectors.groupingBy(current -> {
Test item = new Test();
item.setId(current.getId());
item.setName(current.getName());
return item;
}));
//将数据 id 分组
Map<String, List<Test>> idMap = list.stream()
.collect(Collectors.groupingBy(Test::getId));
7.java8 stream 多字段排序
7.java8 stream 统计
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());
//获取年龄最大的Test
Test maxAge = list.stream().max(Comparator.comparing(Test::getAge)).get();
System.out.println(maxAge.getAge());
//获取年龄最小的Test
Test minAge = list.stream().min(Comparator.comparing(Test::getAge)).get();
System.out.println(minAge.getAge());
//过滤出年龄是20的Test,想过滤出什么条件的都可以
List<Test> list1 = list.stream().filter(person -> person.getAge() == 20).collect(Collectors.toList());
//统计出年龄等于20的个数
long count = list.stream().filter(person -> person.getAge() == 20).count();
//获得年龄的平均值
double asDouble = list.stream().mapToInt(person -> person.getAge()).average().getAsDouble();
//获得年龄的求和
int sum = list.stream().mapToInt(person -> person.getAge()).sum();
8.java8 stream map
List<String> list= 1list.stream().map(e -> e.getBudgetProjectId()).distinct()
.collect(Collectors.toList());