【Java】基础练习 --- Stream练习

news2024/9/23 17:25:07

1.拼接

给定一个字符串数组,使用 Stream 把所有字符串拼接成一个字符串。

String[] arr = {"a", "b", "c"};
输出: abc

(1)源码:

package swp.kaifamiao.codes.Java.d0907;

import java.util.stream.Stream;

/**
 * {class description}
 * 给定一个字符串数组,使用 Stream 把所有字符串拼接成一个字符串。
 * 本题使用 reduce 方法来将所有的字符串通过指定的操作(这里是字符串连接)合并在一起
 * @author SWP
 * @version 1.0.0
 */
public class Text01 {
    public static void main(String[] args) {
        // 给定一个字符串数组
        String[] arr = {"H", "e", "l","l","o"," ","W","o","r","l","d","!"};
        // 创建一个Stream对象,将字符串数组转换为 Stream
        Stream<String> stringStream = Stream.of(arr);
        // 使用 reduce方法将所有的字符串通过字符串连接操作合并在一起
        // reduce方法接收两个参数,一个是初始值,一个是 BinaryOperator 接口的实现,这里传入一个空字符串作为初始值,
        // 并使用 lambda 表达式来实现字符串的连接操作
        String result = stringStream.reduce( "" ,(s1,s2) -> s1 + s2);
        // 输出拼接后的结果
        System.out.println(result);
    }
}

(2)运行效果:

在这里插入图片描述


2.求值

有一个整数集合,分别完成以下操作:

  • 所有元素之和
  • 最大值
  • 最小值

(1)源码:

package swp.kaifamiao.codes.Java.d0907;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * {class description}
 * 有一个整数集合,分别完成以下操作:
 * 1.所有元素之和
 * 2.最大值
 * 3.最小值
 * @author SWP
 * @version 1.0.0
 */
public class Text02 {
    public static void main(String[] args) {
        // 创建一个整数数组列表
        List<Integer> numbers = Arrays.asList(5,2,0,1,3,14);
        // 创建Stream流对象
        Stream stream = numbers.stream();
        // 使用reduce方法计算所有元素的和
        int sum = numbers.stream().reduce(0,Integer::sum);
        System.out.println("所有元素和为:" + sum);
        // 求最大值
        int max = numbers.stream().max(Integer::compare).get();
        System.out.println("元素中的最大值:" + max);
        // 求最小值
        int min = numbers.stream().min(Integer::compare).get();
        System.out.println("元素中的最小值:" + min);
    }
}

(2)运行效果:

在这里插入图片描述


3.薪资最低的员工

有一个员工类Employee,里面有name、age和salary字段。请通过 Stream 对多个Employee对象按salary排序,然后取前3个输出。

(1)源码:

package swp.kaifamiao.codes.Java.d0907;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * {class description}
 * 有一个员工类Employee,里面有name、age和salary字段。请通过 Stream 对多个 Employee 对象按 salary 排序,然后取前3个输出。
 * @author SWP
 * @version 1.0.0
 */
public class Text03 {
    public static void main(String[] args) {
        List<Employee> emp = new ArrayList<>();
        emp.add(new Employee("张三",20,6900.98));
        emp.add(new Employee("李四",27,8980.23));
        emp.add(new Employee("王五",24,6102.34));
        emp.add(new Employee("钱六",25,7200.00));
        emp.add(new Employee("赵七",22,9000.88));
        emp.add(new Employee("孙八",23,12900.66));
        // 创建 Stream 流对象
        Stream stream = emp.stream();
        // 使用sorted方法进行排序,并使用 limted 进行截取,最后使用 Collector 将流中的数据收集到集合中
        List<Employee> sortedEmployees = emp.stream()
                .sorted(Comparator.comparingDouble(Employee::getSalary))
                .limit(3)
                .collect(Collectors.toList());
        // 遍历输出
        for (Employee employee : sortedEmployees) {
            System.out.println(employee);
        }

    }
}
class Employee{
    private String name;
    private Integer age;
    private Double salary;

    public Employee() {
    }

    public Employee(String name, Integer age, Double salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public Integer getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(Integer age) {
        this.age = age;
    }

    /**
     * 获取
     * @return salary
     */
    public Double getSalary() {
        return salary;
    }

    /**
     * 设置
     * @param salary
     */
    public void setSalary(Double salary) {
        this.salary = salary;
    }

    public String toString() {
        return "Employee{name = " + name + ", age = " + age + ", salary = " + salary + "}";
    }
}

(2)运行效果:

在这里插入图片描述


4.平均值

有一个整数集合,求每个元素平方的平均值。

(1)源码:

package swp.kaifamiao.codes.Java.d0907;

import java.util.List;

/**
 * {class description}
 * 有一个整数集合,求每个元素平方的平均值。
 * @author SWP
 * @version 1.0.0
 */
public class Text04 {
    public static void main(String[] args) {
     
        List<Integer> numbers1 = List.of(5,2,0,1,3,1,4);
        System.out.println(numbers1.stream().mapToDouble(x ->x*x).average());
    }
}

(2)运行效果:

在这里插入图片描述


5.斗地主

有一个集合保存扑克牌的花色(四种),另一个集合保存扑克牌点数(13个)。创建一个新的集合保存所有的扑克牌(54张,包含 大小王)。将扑克牌分为四份(3个玩家,1份底牌),排序后输出四份手牌。

(1)源码:(排序问题暂未解决,后续改进)

package swp.kaifamiao.codes.Java.d0907;

import java.util.*;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Text05 {
    public static void main(String[] args) {
        // 创建花色的集合
        List<String> flower = new ArrayList<>();
        // 向集合中添加花色元素
        Collections.addAll(flower, "♠️", "♥️", "♦️", "♣️");

        // 创建点数的集合
        List<String> points = new ArrayList<>();
        // 向点数集合中添加元素
        Collections.addAll(points,"A","2","3","4","5","6","7","8","9","10","J","Q","K");

        // 创建扑克牌的集合
        List<String> poker = new ArrayList<>();
        // 遍历两个集合,向扑克牌中添加大小王外的其他52张手牌
        for (String flowerItem : flower){
            for (String pointsItem : points){
                poker.add(flowerItem+pointsItem);
            }
        }
        // 向手牌的集合中添加大小王
        poker.add("JOKER");
        poker.add("joker");

        // 打乱手牌顺序(洗牌)
        Collections.shuffle(poker);

        // 创建 玩家一 的手牌集合,截取 0 到 1/3的手牌给到 玩家一
        List<String> player1 = new ArrayList<>(poker.subList(0 , (poker.size()-3)/3));

        // 创建 玩家二 的手牌集合 ,截取 1/3 到 2/3 的手牌给到 玩家二
        List<String> player2 = new ArrayList<>(poker.subList((poker.size()-3)/3 , (poker.size()-3)*2/3));

        // 创建玩家三的手牌的集合 , 截取 2/3 到 poker.size() 的手牌给到 玩家三
        List<String> player3 = new ArrayList<>(poker.subList((poker.size()-3)*2/3 , poker.size() - 3));

        // 创建底牌的集合
        List<String> bottom = new ArrayList<>(poker.subList(poker.size() - 3, poker.size()));

        // 定义比较器
        Comparator<String> cardComparator = (o1, o2) -> {
            o1 = o1.replaceAll("[♠♥♦♣]", "");
            o2 = o2.replaceAll("[♠♥♦♣]", "");
            return points.indexOf(o1) - points.indexOf(o2);
        };
        // 排序,整理手牌
        player1.sort(cardComparator);
        player2.sort(cardComparator);
        player3.sort(cardComparator);


        // 输出 各位玩家的 手牌 以及 底牌
        System.out.println("玩家1 的手牌为:" + player1);
        System.out.println("玩家2 的手牌为:" + player2);
        System.out.println("玩家3 的手牌为:" + player3);
        System.out.println("底牌 为:" + bottom);
    }
}

(2)运行效果:

在这里插入图片描述


6.生日提醒

编写一个生日提醒程序,使用Map来存储人名和对应的生日日期。够根据日期提醒用户哪些人今天过生日?

(1)源码:

package swp.kaifamiao.codes.Java.d0907;

import java.time.LocalDate;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * Text06类用于计算距离生日还有多少天
 */
public class Text06 {
    public static void main(String[] args) {
        // 创建一个HashMap用于存储人员姓名和生日信息
        HashMap<String, LocalDate> brith = new HashMap<>();

        // 添加人员的生日信息
        brith.put("张三", LocalDate.of(2002, 5, 20));
        brith.put("李四", LocalDate.of(1998, 9, 12));
        brith.put("王五", LocalDate.of(1997, 5, 14));

        // 输出当前所有生日信息
        System.out.println(brith);

        // 使用迭代器遍历生日信息
        Iterator<Map.Entry<String, LocalDate>> iterator = brith.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, LocalDate> next = iterator.next();
            // 计算距离当前日期的天数
            int day = next.getValue().getDayOfMonth() - LocalDate.now().getDayOfMonth();
            // 判断是否在当前月份且距离生日的天数小于等于7天
            boolean isBrith = next.getValue().getMonth().equals(LocalDate.now().getMonth())
                    && day <= 7;
            // 输出距离生日的天数
            if (isBrith) {
                System.out.printf("距离%s生日还有%d天\n", next.getKey(), day);
            }
        }
    }
}

(2)运行效果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/986344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023高教社杯全国大学生数学建模竞赛E题代码解析

2023高教社杯全国大学生数学建模竞赛E题 黄河水沙监测数据分析 代码解析 因为一些不可抗力&#xff0c;下面仅展示部分python代码&#xff08;第一问的部分&#xff09;&#xff0c;其余代码看文末 首先导入包&#xff1a; import numpy as np import pandas as pd import m…

【Python】matplotlib分格显示

参考&#xff1a;matplotlib图形整合之多个子图一起绘制_matplotlib多子图_王小王-123的博客-CSDN博客 方式一&#xff1a; import matplotlib.pyplot as plt import matplotlib.gridspec as gridspecplt.figure() # 方式一: gridspec # rowspan:行的跨度&#xff0c;colspan…

【代码随想录】Day 49 动态规划10 (买卖股票Ⅰ、Ⅱ)

买卖股票的最佳时机 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ dp[i]表示在第i天时&#xff0c;卖/不卖股票能获得的最大利润&#xff1a; 1、卖股票&#xff1a;dp[i] prices[i] -minPrice&#xff08;i天以前的最低价格&#xff09; 2、不卖股票&am…

Python web自动化测试 —— 文件上传

文件上传三种方式&#xff1a; &#xff08;一&#xff09;查看元素标签&#xff0c;如果是input&#xff0c;则可以参照文本框输入的形式进行文件上传 方法&#xff1a;和用户输入是一样的&#xff0c;使用send_keys 1 2 3 4 5 步骤&#xff1a;1、找到定位元素&#xff0c…

ICCV2021 Exploring Cross-Image Pixel Contrast for Semantic Segmentation (Oral)

Exploring Cross-Image Pixel Contrast for Semantic Segmentation 探索语义分割的跨图像像素对比度 Paper&#xff1a;https://openaccess.thecvf.com/content/ICCV2021/html/Wang_Exploring_Cross-Image_Pixel_Contrast_for_Semantic_Segmentation_ICCV_2021_paper.html Co…

k8s 入门到实战--部署应用到 k8s

k8s 入门到实战 01.png 本文提供视频版&#xff1a; 背景 最近这这段时间更新了一些 k8s 相关的博客和视频&#xff0c;也收到了一些反馈&#xff1b;大概分为这几类&#xff1a; 公司已经经历过服务化改造了&#xff0c;但还未接触过云原生。公司部分应用进行了云原生改造&…

Spring MVC拦截器

拦截器&#xff08;Interceptor&#xff09;是 Spring MVC 提供的一种强大的功能组件。它可以对用户请求进行拦截&#xff0c;并在请求进入控制器&#xff08;Controller&#xff09;之前、控制器处理完请求后、甚至是渲染视图后&#xff0c;执行一些指定的操作。 在 Spring MV…

springboot设置热部署

一、常见的三种方式&#xff1a; Springboot中常见的热部署方式有3种: 1.使用springloaded配置pom.xml文件&#xff0c;使用mvn spring-boot:run启动 2.使用springloaded本地加载启动&#xff0c;配置jvm参数 3.使用devtools工具包&#xff0c;操作简单&#xff0c;但是每次…

python开发基础篇1——后端操作K8s API方式

文章目录 一、基本了解1.1 操作k8s API1.2 基本使用 二、数据表格展示K8s常见资源2.1 Namespace2.2 Node2.3 PV2.4 Deployment2.5 DaemonSet2.6 StatefulSet2.7 Pod2.8 Service2.9 Ingress2.10 PVC2.11 ConfigMap2.12 Secret2.13 优化 一、基本了解 操作K8s资源api方式&#xf…

第11篇:ESP32vscode_platformio_idf框架helloworld点亮LED

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…

酷克数据推出AI开发工具箱HashML 加速企业级AI应用落地投产

近日&#xff0c;业界领先的国产企业级云数仓厂商酷克数据发布了下一代In-Database高级分析和数据科学工具箱HashML&#xff0c;在业内率先实现为企业提供随数仓部署一步到位、开箱即用的AI能力。 在数字经济时代&#xff0c;描述性分析已经非常成熟并被企业广泛采纳。然而&am…

vue3:3、项目目录和关键文件

关于vsvode的更改 <!-- 加上setup允许在script中直接编写组合式api --> <script setup> // 组件引入后直接用 import HelloWorld from ./components/HelloWorld.vue import TheWelcome from ./components/TheWelcome.vue</script><!-- 1、js放在最上面&am…

JDK源码剖析之PriorityQueue优先级队列

写在前面 版本信息&#xff1a; JDK1.8 PriorityQueue介绍 在数据结构中&#xff0c;队列分为FIFO、LIFO 两种模型&#xff0c;分别为先进先出&#xff0c;后进后出、先进后出&#xff0c;后进先出&#xff08;栈&#xff09; 而一切数据结构都是基于数组或者是链表实现。 在…

线上问诊:可视化展示

系列文章目录 线上问诊&#xff1a;业务数据采集 线上问诊&#xff1a;数仓数据同步 线上问诊&#xff1a;数仓开发(一) 线上问诊&#xff1a;数仓开发(二) 线上问诊&#xff1a;数仓开发(三) 线上问诊&#xff1a;可视化展示 文章目录 系列文章目录前言一、全流程调度1.生产新…

两两交换链表中节点

给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2,1,4…

【python 多线程】初体验+单线程下载器+并行下载器

1.多线程初体验 主线程的id和进程的id是一个 查看进程pid下有多少个线程 ps -T -p pid(base) D:\code\python_project\python_coroutine>C:/ProgramData/Anaconda3/python.exe d:/code/python_project/python_coroutine/01demo.py threading.active_count1 i am producer…

vue手写提示组件弹窗

1、弹框展示 2、message组件 新建一个message.vue <template><div class"wrapper" v-if"isShow" :class"showContent ? fadein : fadeout">{{ text }}</div> </template> <script></script> <style s…

智能小车之跟随小车、避障小车原理和代码

目录 1. 红外壁障模块分析​编辑 2. 跟随小车的原理 3. 跟随小车开发和调试代码 4. 超声波模块介绍 5. 摇头测距小车开发和调试代码 1. 红外壁障模块分析 原理和循迹是一样的&#xff0c;循迹红外观朝下&#xff0c;跟随朝前 TCRT5000传感器的红外发射二极管不断发射红外…

使用半导体材料制作霍尔元件的优点

霍尔元件是一种基于霍尔效应的传感器&#xff0c;可以测量磁场强度和电流等物理量。霍尔效应是指&#xff0c;当电流通过一块导体时&#xff0c;如果该导体置于垂直于电流方向的磁场中&#xff0c;就会在导体两侧出现一定的电势差&#xff0c;这就是霍尔效应。霍尔元件可以利用…

亚马逊云科技与百川智能发起AI黑客松,共探医疗健康和游戏娱乐领域的前沿应用

8月31日&#xff0c;亚马逊云科技云创计划成员企业暨基础模型创业公司百川智能&#xff0c;率先通过了《生成式人工智能服务管理暂行办法》备案&#xff0c;即日起面向全社会开放服务。基础模型获准面向公众用户开放服务&#xff0c;意味着有机会基于大量真实用户的调用反馈建立…