public static void main(String[] args) {
List cars = Arrays.asList(
new Car(“宝马X6”,1000000,5,2.0),
new Car(“奔驰S600”,1500000,6,3.0),
new Car(“奥迪A6”,400000,3,2.5),
new Car(“别克”,150000,8,1.8),
new Car(“丰田”,140000,2,1.0));
Scanner input = new Scanner(System.in);
System.out.println("请输入排序方式:1、价格 2、年限 3、排量 ");
int type = input.nextInt();
switch(type){
case 1:
//用匿名内部类实现Comparator,按价格排序
Collections.sort(cars,new Comparator(){
@Override
public int compare(Car o1, Car o2) {
if(o1.getPrice() > o2.getPrice()){
return 1;
}else if(o1.getPrice() < o2.getPrice()){
return -1;
}else{
return 0;
}
}
});
break;
case 2:
//按年限排序
Collections.sort(cars,new Comparator(){
@Override
public int compare(Car o1, Car o2) {
if(o1.getUseYears() > o2.getUseYears()){
return 1;
}else if(o1.getUseYears() < o2.getUseYears()){
return -1;
}else{
return 0;
}
}
});
break;
case 3:
//按排量排序
Collections.sort(cars,new Comparator(){
@Override
public int compare(Car o1, Car o2) {
if(o1.getGas() > o2.getGas()){
return 1;
}else if(o1.getGas() < o2.getGas()){
return -1;
}else{
return 0;
}
}
});
break;
}
for(Car car : cars){
car.run();
}
}
==================================================================
作用是对数据进行遍历,不需要考虑数据的数据结构,提供通用的遍历方式。
方法:
-
boolean hasNext() 判断数据是否还有下一个
-
T next() 向后移动,返回当前数据
实现该接口的对象,可以通过foreach循环遍历
方法:
- Iterator iterator() 返回迭代器
List接口继承Collection接口,Collection继承Iterable接口。
进行foreach循环时,会自动调用iterator(),返回迭代器对象,执行next和hasNext完成数据遍历
=======================================================================
Lambda表达式是Java1.8的重要特性,能使用非常简洁的代码,完成对接口的实现。
应用场景是:实现函数式接口(FunctionalInterface)
函数式接口通常只有一个需要实现的方法,如:Comparator
@FunctionalInterface
public interface Comparator {
int compare(T o1, T o2);
}
语法特点:
() -> 表达式 实现没有参数的方法
(参数名,参数名…) -> 表达式 实现有参数的方法,参数类型可以自动推断出来
(参数名,参数名…) -> {代码}
用Lambda实现排序
Collections.sort(cars,(o1,o2)->{
if(o1.getPrice() > o2.getPrice()){
return 1;
}else if(o1.getPrice() < o2.getPrice()){
return -1;
}else{
return 0;
}
});
List集合.forEach(Consumer接口)
Consumer 接口
void accept(T t)
示例:
cars.forEach((car) -> System.out.println(car));
cars.forEach((car) -> System.out::println));
java1.8推出的Stream接口,提供对集合操作的一系列方法
集合的筛选
Stream filter(Predicate接口)
Predicate接口
boolean test(T t)
集合的收集
collect(Collector收集器)
Collectors类
Collector toList() List类型收集器
Collector toSet() Set类型收集器
Collector toMap() Map类型收集器
集合的排序
sorted(Comparator比较器)
限制返回值个数
limit(个数)
找最大值
max(Comparator比较器)
Stream的使用
List cars = Arrays.asList(
new Car(“宝马X6”,1000000,5,2.0),
new Car(“奔驰S600”,1500000,6,3.0),
new Car(“奥迪A6”,400000,3,2.5),
new Car(“别克”,150000,8,1.8),
new Car(“丰田”,140000,2,1.0));
//筛选出价格200000以上,排量2.0以上的车,按年限排序
List result = cars.stream()
.filter((car)-> car.getPrice() > 200000)
.filter((car)-> car.getGas() > 2.0)
.sorted((c1,c2)-> c1.getUseYears() - c2.getUseYears())
.collect(Collectors.toList());
result.forEach(©->System.out.println©);
//集合中最贵的三辆车
List result = cars.stream()
.sorted((c2,c1)->{
if(c1.getPrice() > c2.getPrice()){
return 1;
}else if(c1.getPrice() < c2.getPrice()){
return -1;
}else{
return 0;
}
})
.limit(3)
.collect(Collectors.toList());
result.forEach(©->c.run());
//最贵的车
Car max = cars.stream()
.max((c1,c2)->{
if(c1.getPrice() > c2.getPrice()){
return 1;
}else if(c1.getPrice() < c2.getPrice()){
return -1;
}else{
return 0;
}
})
.get();
System.out.println(“最贵的车:” + max);
================================================================
作业:
- 定义食品类,属性有:名称、价格(double)、重量(double)、保质年数(int),重写toString方法
创建食品集合,添加一定数量的食品
用户输入排序方式(1、价格 2、重量 3、保质期)
按排序方式进行排序,并显示
显示价格在100以下,重量超过10,保质期超过2年的所有商品。
显示价格最高的1样商品
大家如果需要学习其他Java知识点,戳这里 超详细的Java知识点汇总
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
索成长,自己不成体系的自学效果低效漫长且无助。**
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-T0rHH1s3-1714821515658)]
[外链图片转存中…(img-QfPxFiDQ-1714821515658)]
[外链图片转存中…(img-ZfkLbrEI-1714821515658)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!