java8 Stream接口简单使用
Stream接口简单使用
什么是stream?
Stream是元素得集合,这点让Stream看起来类似Iterator;可以支持顺序和并行的对原Stream进行汇聚的操作
我们可以把Stream当成一个高级版本的Iterator,原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,比如“过滤大于10的数字”,“获取所有数字的和”等,具体这些操作如何应用到每个元素上,就给Stream就好了!
代码演示:
定义一个实体类:
class Cat {
private String name;
private int age;
public Cat() {
}
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
// get,set,toString
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Cat cat = (Cat) o;
return age == cat.age && Objects.equals(name, cat.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
添加对象到集合中:
List<Cat> catsList = new ArrayList<>();
catsList.add(new Cat("tom", 3));
catsList.add(new Cat("tom", 3));
catsList.add(new Cat("uom", 3));
catsList.add(new Cat("tom", 1));
catsList.add(new Cat("jek", 2));
catsList.add(new Cat("join", 3));
案列1:遍历集合
private static void test1(List<Cat> catsList) {
catsList.forEach(System.out::println);
}
案列2:筛选集合中年龄大于2的并把它们的名字组成一个新的集合
private static void test1(List<Cat> catsList) {
List<String> collect = catList.stream().filter(a -> a.getAge() > 2).map(Cat::getName).collect(Collectors.toList());
}
案列3:转换为set集合
private static void test1(List<Cat> catsList) {
//Set<Cat> collect = new HashSet<>(catsList);建议
Set<Cat> collect = catsList.stream().collect(Collectors.toSet());
}
案列4:按照年龄排序后转换成linkedHashSet集合
private static void test1(List<Cat> catsList) {
LinkedHashSet lhs = catsList.stream().sorted(Comparator.comparing(Cat::getAge)).collect(Collectors.toCollection(LinkedHashSet::new))
}
案列5:找出年龄最大的,如果年龄一样找出名字比较大的
private static void test1(List<Cat> catsList) {
Optional<Cat> max = catsList.stream().max((o1, o2) -> {
if (o1.getAge() != o2.getAge()) {
return o1.getAge() - o2.getAge();
}
return o1.getName().compareTo(o2.getName());
});
System.out.println(max.orElse(null));
}
案例6:去重后计算年龄和
private static void test1(List<Cat> catsList) {
Optional<Integer> reduce = catsList.stream().distinct().map(Cat::getAge).reduce(Integer::sum);
System.out.println(reduce.orElse(-1));
}
案例7:判断是否所有的年龄都大于2岁
private static void test1(List<Cat> catsList) {
boolean b = catsList.stream().allMatch(a -> a.getAge() > 2);
}
案例8:判断是否至少有一个大于2岁的
private static void test1(List<Cat> catsList) {
boolean b = catsList.stream().anyMatch(a -> a.getAge() > 2);
}
案例9:按照年龄分组:
private static void test1(List<Cat> catsList) {
Map<Integer, List<Cat>> collect = catsList.stream().collect(Collectors.groupingBy(Cat::getAge));
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!