可变参数和Strem流

可变参数

        可变参数用在方法的形式参数的位置,它可以看做是一个数组,可以接收多个实际参数。

public static void main(String[] args){
    int sum1=getSum(3,4,5); //求3,4,5的和
    
    int sum2=getSum(1,2,3,4,5,6); //求1,2,3,4,5,65的和
    
    int[] array={1,2,3,4,5,6};
    int sum2=getSum(array); //求1,2,3,4,5,65的和
}

//求任意几个数的和
//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<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流

        JDK8提供了Stream流用来对集合或者数组进行操作,使用Stream流需要经过下面的几个步骤。

1.获取流  (创建流水线)
2.中间操作 (流水线操作环节)
3.终结操作 (流水线上的最后环节)

获取流

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); 

中间操作

中间操作的方法返回值还是一个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) 

终结操作

forEach: 遍历元素
count:  统计个数
    
collect: 收集剩余的元素到新的集合
	toList: 把元素放到List集合中
	toSet:  把元素放到Set集合中
	toMap:  把元素放到Map集合
		需要给定2个Lambda表达式,分别表示键和值

Stream流练习

按要求完成代码

    1.创建一个Student类,有name和age两个属性    
    2.创建一个ArrayList集合,往集合中添加10个Student对象
    3.使用Stream流过滤集合中年龄>20的元素
    4.跳过前面的2个元素
    5.截取前面的4个元素
    6.尝试对流中的元素,进行以下终结操作
        1)把Stream流中的元素打印
        2)把Stream流中的元素收集成List集合
        3)把Stream流中的元素收集成Map集合,姓名是键、年龄是值。

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); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值