可变参数
可变参数指的是,方法参数的个数可以发生改变。但是其本质是一个数组,在方法把可变参数当做数组来使用就可以了。
注意:在方法把可变参数当做数组来使用!不可以当成普通的单个参数使用!
//可变参数的格式:数据类型...参数名
public static void 方法名(数据类型... 参数名){
...
}
求多个整数的和,代码如下
public static void main(String[] args){
getSum(1,2,3,4,5); //15
getSum(1,2,3); //6
int[] array={1,2,3,4,5};
getSum(array); //15
}
//求多个整数的和
public static void getSum(int... array){
int sum=0;
for(int i=0;i<array.length;i++){
sum+=array[i];
}
System.out.println("所有整数的和为:"+sum);
}
创建不可变的集合
//创建List集合,并添加元素
List<元素类型> list= List.of(元素1,元素2....);
//创建Set集合,并添加元素
Set<元素类型> set = Set.of(元素1,元素2....);
//创建Map集合,并添加元素
Map<键的类型,值的类型> map = Map.of(键1,值1,键2,值2);
Map<键的类型,值的类型> map = Map.ofEntries(Map.entry(键1,值1),Map.entry(键2,值2));
Stream流
Stream流指的是流式编程,可以让我们操作集合或者数组的时候更加方便。
Stream流的操作步骤
获取流操作
//单列集合获取流
Stream<元素类型> s1 = 集合名.stream();
//双列集合获取流
Stream<键的类型> s2 = map.keySet().stream();
Stream<值的类型> s3 = map.values().stream();
Stream<键值对的类型> s5 = map.entrySet().stream();
//数组获取流
Stream<元素类型> s6 = Arrays.stream(数组名);
//多个数据获取流
Stream<元素类型> s7 = Stream.of(元素1,元素2...);
转换流操作
fliter: 对流中的元素进行过滤
limit: 截取前面的n个元素
skip: 跳过前面的n个元素
concat: 合并两个流对象(注意:只能合并两个流,不能多个流)
Stream s = Stream.concat(流1,流2);
distinct: 去重除重复元素
去重s = Stream.distinct(流1,流2);
如果元素的hashCode和euqals判断都相同,才认为元素重复(自定义类需要重写HashCode和equals方法)
终结操作
forEach: 遍历元素
count: 元素个数
collect: 把流中的元素收集到集合中
Collectors.toList(); //转换为List集合
Collectors.toSet(); //转换为Set集合
Collectors.toMap(
lambda表达式1, //返回键
lambda表达式2, //返回值
); //转换为Map集合
Stream流练习
ArrayList<String> list1=new ArrayList<>();
list1.add("杨过");
list1.add("杨简");
list1.add("张三丰");
list1.add("张无忌");
list1.add("刘德华");
ArrayList<String> list2=new ArrayList<>();
list2.add("杨幂");
list2.add("杨紫");
list2.add("刘曼");
list2.add("黄晶");
list2.add("张柏芝");
list2.add("张曼玉");
//1.获取男演员的三个字的姓名,截取前面前面2个
Stream<String> s1 = list1.stream().filter(s -> s.length() == 3).limit(2);
//2.获取女演员的两个字的姓名, 跳过前面1个
Stream<String> s2 = list2.stream().filter(s -> s.length() == 2).skip(1);
//3.把男演员和女演员合并
Stream<String> s3 = Stream.concat(s1, s2);
//4.把剩下的所有姓名,封装为Actor对象
s3.forEach(s-> System.out.println(new Actor(s)));