1. 分组操作
public class Foo{
private String name;
private String type;
private Double typeValue;
private Integer count;
get()..
set()..
}
List<Foo> fooList = new ArrayList<Foo>();
fooList.add(new Foo("A","san",1.0,2)) ;
fooList.add( new Foo("A","nas",13.0,1)) ;
fooList.add(new Foo("B","san",112.0,3)) ;
fooList.add(new Foo("C","san",43.0,5)) ;
fooList.add(new Foo("B","nas",77.0,7)) ;
List<List<Foo>> groupList = new ArrayList<>();
fooList.stream().collect(Collectors.groupingBy(Foo::getName,Collectors.toList()))
.forEach((name,fooListByName)->{
groupList.add(fooListByName);
});
System.out.println(JSON.toJSONString(groupList));
2. 排序操作(倒序)
public class Student{
private Integer id;
private String name;
get()..
set()..
}
List<Student> list=new ArrayList<Student>();
list.add(new Student());
list.stream().sorted(Comparator.comparing(ListingAgentPower::getEnddate).reversed())
.collect(Collectors.toList());
3. 数组集合转换为逗号分隔的字符串
ArrayList<Integer> bo = new ArrayList<Integer>();
bo.add(1);
bo.add(2);
bo.add(3);
String houseids = bo.stream().map(String::valueOf).collect(Collectors.toList()).stream()
.collect(Collectors.joining(","));
System.err.println(houseids);
4. 根据字段排重
public class Student {
private Integer id;
private String name;
private String address;
set()..
get()..
//可能重写equals方法
}
private static void method_1() {
Student s1 = new Student();
s1.setId(1);
s1.setName("张三");
s1.setAddress("北京");
Student s2 = new Student();
s2.setId(2);
s2.setName("张三");
s2.setAddress("上海");
List<Student> list = new ArrayList<Student>();
list.add(s1);
list.add(s2);
// int count = list.stream().distinct().collect(Collectors.toList()).size();
int count = list.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(f -> f.getName()))), ArrayList::new)).size();
System.out.println(count);
list.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(f -> f.getName()))), ArrayList::new)).forEach(item -> {
System.out.println(item);
});
}
5. 过滤操作以及元素操作
private void method_1() {
Stream.iterate(10, item -> item + 1).limit(10).forEach(System.out::println);
}
private static void method_2() {
List<Integer> nums = Arrays.asList(1, 1, null, 2, 3, 4, null, 5, 6, 7, 8, 9, 10);
System.out.println(
"sum is:" + nums.stream().filter(num -> num != null).distinct().mapToInt(num -> num * 2).peek(item -> {
System.out.println(item * 3);
}).skip(2).limit(4).sum());
}
6.数组拼接字符串
int[] arr = {1,2,3,4};
String str1 = Arrays.stream(arr).boxed().map(i -> i.toString()) //必须将普通数组 boxed才能 在 map 里面 toString
.collect(Collectors.joining(""));
System.out.println(str1);
String str2 = Arrays.stream(arr).boxed().map(i -> i.toString()).reduce("", String::concat);
System.out.println(str2);
String str3 = Arrays.stream(arr).boxed().map(Object :: toString).reduce("", String::concat); // 方法引用Object::toString
System.out.println(str3);
7. 集合中直接包含BigDecimal元素的累加
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(7);
list.add(2);
IntSummaryStatistics collect = list.stream().collect(Collectors.summarizingInt(value -> value));
System.out.println(collect);
System.out.println("统计集合元素的个数:" + collect.getCount());
System.out.println("集合元素累加之和:" + collect.getSum());
System.out.println("集合中最小值:" + collect.getMax());
System.out.println("集合中最大值:" + collect.getMin());
System.out.println("集合中平均值:" + collect.getAverage());
打印结果:
IntSummaryStatistics{count=3, sum=12, min=2, average=4.000000, max=7}
统计集合元素的个数:3
集合元素累加之和:12
集合中最小值:7
集合中最大值:2
集合中平均值:4.0
8.集合中包含对象并求其中的一个元素的累加之和
Person p1 = new Person("张三", new BigDecimal("10.0"));
Person p2 = new Person("王五", new BigDecimal("10.0"));
Person p3 = new Person("李四", new BigDecimal("10.0"));
Person p4 = new Person("王五", new BigDecimal("10.0"));
Person p5 = new Person("赵六", new BigDecimal("10.0"));
List<Person> pList = new ArrayList<>();
pList.add(p1);
pList.add(p2);
pList.add(p3);
pList.add(p4);
pList.add(p5);
BigDecimal reduce = pList.stream().map(Person::getSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("工资总计:" + reduce);
打印结果:
工资总计:50.0