一,可变参数:可变参数用在方法的形式参数的位置,它可以看做是一个数组,可以接收多个实 际参数。代码如下(该代码只是一个方法)
//求任意几个数的和
//int... array : 可变参数,可以接收多个int类型的值
public static int getSum(int... array){
int sum=0;
for(int i=0;i<array.length;i++){
sum+=array[i];
}
return sum;
}
可变参数的应用:LIst、Set、Map接口都提供了一个静态方法of,可以生成一个不可变的集合, 同时添加任意多个元素。
List<String> list2 = List.of("hello", "world", "java");
System.out.println(list2);
Set<String> set = Set.of("hello", "java", "world");
System.out.println(set);
Map<String, Integer> map = Map.of("张三", 20, "李四", 30, "王五", 40);
System.out.println(map);
二,Stream流
通过Stream流来对数组进行一系列的操作,一般操作过程如下:
1)获取流(创建流水线)
2)中间操作(流水线操作环节)
3)终结操作(流水线上的最后一个环节)
1,获取流
//1.单列集合获取流
Stream stream = 集合对象.stream();
//2.双列集合获取流(不能直接获取流,需要转换为单列集合才可以获取流)
//键集,获取流
Stream keyStream=map.keySet().stream();
//值集,获取流
Stream valueStream=map.values().stream();
//键值对集,获取流
Stream entryStream=map.entrySet().stream();
//3.数组获取流、同一个类型的多个数据获取流
Integer[] array={1,2,3,4,5};
Stream arrayStream1=Stream.of(array);
Stream arrayStream2=Stream.of(1,2,3,4,5);
2,中间操作
中间操作的方法返回值还是一个Stream流,可以继续调用其他方法
fliter: 对元素进行过滤
limit: 截取前面n个元素
skip: 跳过前面n个元素
sorted: 对元素进行排序,如果排序规则不符合自己的要求可以自定义比较器
distinct: 去除重复元素
map: 对流中的元素进行转换
concat: 把两个流合并为1个流
Stream<Integer> stream1=List.of(1,2,3,4).stream();
Stream<Integer> stream2=List.of(5,6,7,8).stream();
举例: 把stream1和stream2合并为1个流
Stream stream3=Stream.concat(stream1,stram2)
3,终结操作
forEach: 遍历元素
count: 统计个数
collect: 收集剩余的元素到新的集合
toList: 把元素放到List集合中
toSet: 把元素放到Set集合中
toMap: 把元素放到Map集合
需要给定2个Lambda表达式,分别表示键和值
4,练习
ArrayList<Student> list=new ArrayList<>();
list.add(new Student("张三",20));
list.add(new Student("李四",18));
list.add(new Student("王五",19));
list.add(new Student("赵六",25));
list.add(new Student("前妻",27));
list.add(new Student("王炸",28));
list.add(new Student("小王",26));
list.add(new Student("大王",24));
list.add(new Student("蘑菇头",23));
list.add(new Student("妹爷",29));
list.add(new Student("老王",30));
list.add(new Student("老李",22));
//演示Stream流的过滤、跳过、截取、转换、遍历功能
list.stream()
.filter(s -> s.getAge() > 20) //过滤年龄>20的学生
.skip(2) //跳过前面2个
.limit(4) //截取前面4个
.map(s -> s.getName()) //把Student元素转换为String姓名
.forEach(s -> System.out.println(s)); //遍历输出
System.out.println("-----------------");
//演示Stream流的过滤、跳过、截取、最后收集成List的功能
List<Student> list1 = list.stream()
.filter(s -> s.getAge() > 20) //过滤年龄>20的学生
.skip(2) //跳过前面2个
.limit(4) //截取前面4个
.collect(Collectors.toList()); //把剩余的元素收集成List集合
System.out.println(list1);
System.out.println("-----------------");
//演示Stream流的过滤、跳过、截取、最后收集成Map的功能
Map<String,Integer> map=list.stream()
.filter(s -> s.getAge() > 20) //过滤年龄>20的学生
.skip(2) //跳过前面2个
.limit(4) //截取前面4个
.collect(Collectors.toMap(
s -> s.getName(),
s -> s.getAge())
); //把剩余的元素收集为Map集合
System.out.println(map);