【Stream流常见方法的使用】

Stream流的使用

public class Emp {
 
	private String name;
	
	private Integer age;
	
	private String address;
	
    public Emp(String name, Integer age, String address) {
		super();
		this.name = name;
		this.age = age;
		this.address = address;
	}
 
}
public static void main(String[] args) {
		List<Emp> list = new ArrayList<Emp>();
		List<Emp> list2 = new ArrayList<Emp>();

		list.add(new Emp("张三", 12, "湖北武汉"));
		list.add(new Emp("李四", 13, "湖北襄阳"));
		list.add(new Emp("王五", 11, "湖北武汉"));
		list.add(new Emp("赵柳", 14, "湖北东津"));
		list.add(new Emp("秦琪", 13, "湖北汉口"));
		list.add(new Emp("秦琪", 13, "湖北汉口"));

		list2.add(new Emp("张三", 12, "湖北武汉"));
		list2.add(new Emp("李四", 13, "湖北襄阳"));
		list2.add(new Emp("王五", 11, "湖北武汉"));
		list2.add(new Emp("赵柳", 14, "湖北东津"));
		list2.add(new Emp("秦琪", 13, "湖北汉口"));
		list2.add(new Emp("秦琪", 13, "湖北汉口"));
		
	}
1.排序
1.1正序
list.stream().forEach(System.out::println);

输出结果:

Emp{name='张三', age=12, address='湖北武汉'}
Emp{name='李四', age=13, address='湖北襄阳'}
Emp{name='王五', age=11, address='湖北武汉'}
Emp{name='赵柳', age=14, address='湖北东津'}
Emp{name='秦琪', age=13, address='湖北汉口'}
Emp{name='秦琪', age=13, address='湖北汉口'}
1.2倒序
list.stream().sorted((a,b)->Integer.compare(b.getAge(), a.getAge())).forEach(System.out::println);
list2.stream().sorted(Comparator.comparing(Emp::getAge).reversed()).
forEach(System.out::println);

输出结果:

list:
Emp{name='赵柳', age=14, address='湖北东津'}
Emp{name='李四', age=13, address='湖北襄阳'}
Emp{name='秦琪', age=13, address='湖北汉口'}
Emp{name='秦琪', age=13, address='湖北汉口'}
Emp{name='张三', age=12, address='湖北武汉'}
Emp{name='王五', age=11, address='湖北武汉'}
list2:
Emp{name='赵柳', age=14, address='湖北东津'}
Emp{name='李四', age=13, address='湖北襄阳'}
Emp{name='秦琪', age=13, address='湖北汉口'}
Emp{name='秦琪', age=13, address='湖北汉口'}
Emp{name='张三', age=12, address='湖北武汉'}
Emp{name='王五', age=11, address='湖北武汉'}

#####1. 3limit()用法

筛选出前两个数据

list.stream().limit(2).collect(Collectors.toList()).forEach(System.out::println);

输出结果:

Emp{name='张三', age=12, address='湖北武汉'}
Emp{name='李四', age=13, address='湖北襄阳'}
1.4skip()用法

删除前两个数据

List<Emp> collect = list.stream().skip(2).collect(Collectors.toList());

输出结果:

[Emp{name='王五', age=11, address='湖北武汉'},
Emp{name='赵柳', age=14, address='湖北东津'},
Emp{name='秦琪', age=13, address='湖北汉口'}, 
Emp{name='秦琪', age=13, address='湖北汉口'}]

2.条件过滤

过滤年龄大于12岁的

list.stream().filter(a->a.getAge()>12).collect(Collectors.toList()).forEach(System.out::println);

输出结果:

Emp{name='李四', age=13, address='湖北襄阳'}
Emp{name='赵柳', age=14, address='湖北东津'}
Emp{name='秦琪', age=13, address='湖北汉口'}
Emp{name='秦琪', age=13, address='湖北汉口'}

筛选联查:筛选年龄大于12切地址为湖北襄阳的数据

list.stream().filter(a->a.getAge()>12)
.filter(b->b.getAddress()=="湖北襄阳").collect(Collectors.toList())
.forEach(System.out::println);

输出结果:

Emp{name='李四', age=13, address='湖北襄阳'}

3.去重
3.1distinct()用法

去除完全相同的数据,对象必须重写hash以及equal方法

list.stream().distinct().collect(Collector.toList()).forEach(System.out::println);

4.按照指定属性进行去重

指定按照年龄去重

list.stream().collect(Collectors.collectingAndThen
(Collectors.toCollection(
()->new TreeSet<>(Comparator.comparing(Emp::getAge))),ArrayList::new)).forEach(System.out::println);

输出结果:

Emp{name='王五', age=11, address='湖北武汉'}
Emp{name='张三', age=12, address='湖北武汉'}
Emp{name='李四', age=13, address='湖北襄阳'}
Emp{name='赵柳', age=14, address='湖北东津'}

指定地址去重

list.stream().collect(Collectors.collectingAndThen
(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(Emp::getAddress))),ArrayList::new))
.forEach(System.out::println);

输出结果:

Emp{name='赵柳', age=14, address='湖北东津'}
Emp{name='张三', age=12, address='湖北武汉'}
Emp{name='秦琪', age=13, address='湖北汉口'}
Emp{name='李四', age=13, address='湖北襄阳'}

5.常见方法

max,min,findAny,findFirst,总和,分组,平均数。。。

//年龄最大
Optional<Emp> max = list.stream().max(Comparator.comparing(Emp::getAge));
//年龄最小
Optional<Emp> max1 = list.stream().max(Comparator.comparing(a -> a.getAge()));
//一次性获取最大,最小,平均,总和
list.stream().collect(Collectors.summarizingInt(user -> user.getAge()));
//输出结果:IntSummaryStatistics{count=6, sum=76, min=11, average=12.666667, max=14}

//分组求和
Map<Integer, Long> collect12 = list.stream().collect(Collectors.groupingBy(Emp::getAge, Collectors.counting()));
//输出结果  {11=1, 12=1, 13=3, 14=1}  {age,count}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咿呀&萨摩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值