JAVA题目笔记(二十)Stream流综合练习+方法引用

一、数据过滤

import java.util.*;
import java.util.stream.Collectors;

public class Co {
    public static void main(String[] args) {
        List<Integer> list=new ArrayList<>();
        Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
        List<Integer> newlist = list.stream()
                .filter(s -> s % 2 == 0)
                .collect(Collectors.toList());
        newlist.forEach(s-> System.out.println(s));
        //2
        //4
        //6
        //8
        //10

    }
}

二、数据操作

数据操作(一)

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Co {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"zhangsan,23","lisi,24","wangwu,25");
        Map<String, Integer> map = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
                .collect(Collectors.toMap(new Function<String, String>() {
                                              @Override
                                              public String apply(String s) {
                                                  return s.split(",")[0];
                                              }
                                          }
                        , new Function<String, Integer>() {
                            @Override
                            public Integer apply(String s) {
                                return Integer.parseInt(s.split(",")[1]);
                            }
                        }));

        //lambda简化
        Map<String, Integer> map1 = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
                .collect(Collectors
                        .toMap(s->s.split(",")[0],s->Integer.parseInt(s.split(",")[1])));
        System.out.println(map); //{lisi=24, wangwu=25}
        System.out.println(map1); //{lisi=24, wangwu=25}

    }
}

数据操作(二)

import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Co {
    public static void main(String[] args) {
        //创建男演员对象
        Actor actor1=new Actor("张三二",23);
        Actor actor2=new Actor("李四",24);
        Actor actor3=new Actor("王五",25);
        Actor actor4=new Actor("成三",28);
        Actor actor5=new Actor("李大壮",29);
        Actor actor6=new Actor("王狗圣",33);

        //创建演员对象
        Actor actor7=new Actor("杨花",23);
        Actor actor8=new Actor("杨乐",24);
        Actor actor9=new Actor("王华",25);
        Actor actor10=new Actor("小妹",28);
        Actor actor11=new Actor("杨女家",29);
        Actor actor12=new Actor("杨花花",33);

        ArrayList<Actor> listNAN=new ArrayList<>();
        ArrayList<Actor> listNV=new ArrayList<>();
        Collections.addAll(listNAN,actor1,actor2,actor3,actor4,actor5,actor6);
        Collections.addAll(listNV,actor7,actor8,actor9,actor10,actor11,actor12);

        //男演员只要名字三个字的前两人
        listNAN.stream().filter(new Predicate<Actor>() {
            @Override
            public boolean test(Actor actor) {
                    return actor.getName().length() == 3;
                }
        }).limit(2);

        //女演员只要姓杨的且不要第一个
        listNV.stream().filter(new Predicate<Actor>() {
            @Override
            public boolean test(Actor actor) {
                return "杨".equals(actor.getName().substring(0,1));
            }
        }).skip(1);
        //合并两个流存入List集合中    用lambda简化

        List<Actor> resultlist = Stream.concat(listNAN.stream().filter(s -> s.getName().length() == 3).limit(2),
                        listNV.stream().filter(s -> "杨".equals(s.getName().substring(0, 1))).skip(1))
                .collect(Collectors.toList());
        for (Actor s : resultlist) {
            System.out.println(s);
        }
        //Actor{name = 张三二, age = 23}
        //Actor{name = 李大壮, age = 29}
        //Actor{name = 杨乐, age = 24}
        //Actor{name = 杨女家, age = 29}
        //Actor{name = 杨花花, age = 33}
    }
}

三、方法引用

练习一:

import java.util.*;


public class Co {
    public static void main(String[] args) {

        //引用构造方法 类名::new
        //引用指定类型数组构造方法   数据类型[]::new
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张三,23","李四,18","王五,39","陈六,34");
        Actor[] arr = list.stream().map(Actor::new).toArray(Actor[]::new);
        System.out.println(Arrays.toString(arr));
        //[Actor{name = 张三, age = 23}, Actor{name = 李四, age = 18},
        // Actor{name = 王五, age = 39}, Actor{name = 陈六, age = 34}]

    }
}
        public Actor() {
        }

        //引用构造方法 所需要增加的新构造方法
        public Actor(String s) {
            this.name=s.split(",")[0];
            this.age=Integer.parseInt(s.split(",")[1]);
        }

        public Actor(String name, int age) {
            this.name = name;
            this.age = age;
        }

练习二:

import java.util.*;
import java.util.function.Function;


public class Co {
    public static void main(String[] args) {

        Actor actor1=new Actor("张三",20);
        Actor actor2=new Actor("王五",10);
        Actor actor3=new Actor("李四",40);
        Actor actor4=new Actor("陈六",22);
        ArrayList<Actor> list=new ArrayList<>();
        Collections.addAll(list,actor1,actor2,actor3,actor4);

        //使用类名引用成员方法
        //独有规则:
        //1、需要有函数式接口
        //2、被引用方法必须已经存在
        //3、被引用方法的形参需要跟抽象方法的第二个形参到最后一个形参保持一致,返回值需保持一致
        //4、被引用方法的功能需要满足当前需求
        //抽象方法形参的详解:
        //第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法,在Stream流中,第一个参数一般表示流中每一个数据,假设流中数据为String类型,那么使用这种方法进行方法引用,只能引用String类中的方法。
        //第二个参数到最后一个参数:跟被引用方法的形参保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法。

        String[] arr = list.stream().map(Actor::getName).toArray(String[]::new);
        System.out.println(Arrays.toString(arr)); //[张三, 王五, 李四, 陈六]

    }
}

练习三:

import java.util.*;


public class Co {
    public static void main(String[] args) {

        Actor actor1=new Actor("张三",20);
        Actor actor2=new Actor("王五",10);
        Actor actor3=new Actor("李四",40);
        Actor actor4=new Actor("陈六",22);
        ArrayList<Actor> list=new ArrayList<>();
        Collections.addAll(list,actor1,actor2,actor3,actor4);
        //使用类名引用成员方法
        String[] arr = list.stream().map(Actor::toString).toArray(String[]::new);
        System.out.println(Arrays.toString(arr));
        //[张三-20, 王五-10, 李四-40, 陈六-22]

    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python学习34天

import random class Game: peo0 rob0 # # def __init__(self,peo,rob): # self.peopeo # self.robrob def Play(self): """ 石头剪刀布游戏&#xff0c;0代表石头&#xff0c;1代见到&#xff0c;2代表石头 …

MATLAB支持的距离度量

距离度量是用于量化两个点或样本之间差异的一种方法。在不同的领域和应用场景中&#xff0c;距离度量的选择可能会有所不同。 欧几里得距离&#xff08;Euclidean Distance&#xff09;&#xff1a;这是最直观的距离定义&#xff0c;适用于n维空间中的两点。对于二维空间中的点…

Jmeter中的测试片段和非测试原件

1&#xff09;测试片段 1--测试片段 功能特点 重用性&#xff1a;将常用的测试元素组合成一个测试片段&#xff0c;便于在多个线程组中重用。模块化&#xff1a;提高测试计划的模块化程度&#xff0c;使测试计划更易于管理和维护。灵活性&#xff1a;可以通过模块控制器灵活地…

【1.2 Getting Started--->Installation Guide】

NVIDIA TensorRT DOCS 此 NVIDIA TensorRT 10.6.0 安装指南提供安装要求、TensorRT 包中包含的内容列表以及安装 TensorRT 的分步说明。 安装指南 摘要&#xff1a; 本 NVIDIA TensorRT 10.3.0 安装指南提供了安装要求、TensorRT 软件包中包含的内容列表以及安装 TensorRT 的…

ubuntu设置程序开机自启动

文章目录 1、概述2、图形界面设置3、设置为Systemd服务 1、概述 测试环境&#xff1a;ubuntu22.04 带图形界面 实现方式1&#xff1a;通过图形界面的【启动应用程序】设置开机自启动&#xff1b; 实现方式2&#xff1a;通过配置为服务实现开机自启动。 2、图形界面设置 优点&am…

IDEA2024创建一个spingboot项目

以下是创建一个基本的 Spring Boot 项目的步骤和示例&#xff1a; 初始化一个springboot工程其实有许多方法&#xff0c;笔者这里挑了一个最快捷的方式搭建一个项目。我们直接通过官方平台&#xff08;start.spring.io&#xff09;进行配置&#xff0c;然后下载压缩包就可以获取…

商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)

一、 密码应用安全性评估方案 &#xff08;一&#xff09; 密码应用测评工作思路 1.1.1. 测评准备活动的主要任务 1.1.2. 测评准备活动的输出文档 1.2. 方案编制活动 1.2.1. 方案编制活动的主要任务 1.2.2. 方案编制活动的输出文档 1.3. 现场预评估活动 1.3.1. 现场测评…

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术&#xff0c;广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性&#xff0c;通过对当前数据的预测和实际值与预测值之间的差值进行编码&#xff0c;从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…

标定系列——关于cv::calibrateHandEye的介绍

关于cv::calibrateHandEye的介绍 介绍函数原型所在头文件原理说明 介绍 函数原型 void cv::calibrateHandEye ( InputArrayOfArrays R_gripper2base, InputArrayOfArrays t_gripper2base, InputArrayOfArrays R_target2cam, InputArrayOfArrays t_target2cam, OutputArra…

uname -m(machine) 命令用于显示当前系统的机器硬件架构(Unix Name)

文章目录 关于 arm64 架构检查是否安装了 Rosetta 2其他相关信息解释&#xff1a;命令功能&#xff1a;示例&#xff1a; dgqdgqdeMac-mini / % uname -m arm64您运行的 uname -m 命令显示您的系统架构是 arm64。这意味着您的 Mac Mini 使用的是 Apple 的 M1 或更新的芯片&…

代码随想录算法训练营day46|动态规划09

买卖股票的最佳时机四 之前是最多只能完成两笔交易&#xff0c;现在是至多可以买卖k次&#xff0c;那么状态数需要定为2*k1种&#xff0c;此时&#xff0c;就要分析多种情况的递推式 找到奇偶数交替的规则即可 class Solution { public:int maxProfit(int k, vector<int&g…

qt QDateTime详解

1. 概述 QDateTime 是 Qt 框架中用于处理日期和时间的类。它将 QDate 和 QTime 组合在一起&#xff0c;提供了日期时间的统一处理方案。QDateTime 可以精确到毫秒&#xff0c;并支持时区处理。 2. 重要方法 构造函数: QDateTime() 构造无效的日期时间 QDateTime(const QDa…

[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法

本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时&#xff0c;突然发现它的一个接口&#xff0c;被另一个服务ip频繁的请求。 按理说&#xff0c;之前设置的是&#xff0c;每隔1分钟请求一次接口。但从日志来看&#xff0c;则是1秒钟请求一次&#xff…

imx-6ULL uboot 移植

写在前面&#xff1a; 本文章旨在总结备份、方便以后查询&#xff0c;由于是个人总结&#xff0c;如有不对&#xff0c;欢迎指正&#xff1b;另外&#xff0c;内容大部分来自网络、书籍、和各类手册&#xff0c;如若侵权请告知&#xff0c;马上删帖致歉。 目录 环境搭建交叉编…

Zookeeper选举算法与提案处理概览

共识算法(Consensus Algorithm) 共识算法即在分布式系统中节点达成共识的算法&#xff0c;提高系统在分布式环境下的容错性。 依据系统对故障组件的容错能力可分为&#xff1a; 崩溃容错协议(Crash Fault Tolerant, CFT) : 无恶意行为&#xff0c;如进程崩溃&#xff0c;只要…

零地址挂页

零地址 如果我们有比较好的C编程基础&#xff0c;我们就会知道&#xff0c;我们在代码中定义了一个零地址或者空指针&#xff0c;那么它实际上会指向虚拟内存的零地址&#xff0c;多数操作系统&#xff0c;包括Win&#xff0c;在进程创建的时候&#xff0c;都会空出前64k的空间…

leetcode:222完全二叉树的节点个数

给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置。若最…

【小白学机器学习36】关于独立概率,联合概率,交叉概率,交叉概率和,总概率等 概念辨析的例子

目录 1 先说结论 2 联合概率 3 边缘概率 4 (行/列)边缘概率的和 总概率1 5 条件概率 5.1 条件概率的除法公式 5.2 条件概率和联合概率区别 1 先说结论 关于独立概率&#xff0c;联合概率&#xff0c;交叉概率&#xff0c;交叉概率和&#xff0c;总概率 类型含义 …

【前端】ES6基础

1.开发工具 vscode地址 :https://code.visualstudio.com/download, 下载对应系统的版本windows一般都是64位的 安装可以自选目录&#xff0c;也可以使用默认目录 插件&#xff1a; 输入 Chinese&#xff0c;中文插件 安装&#xff1a; open in browser&#xff0c;直接右键文件…

《安富莱嵌入式周报》第346期:开源2GHz带宽,12bit分辨率,3.2Gsps采样率示波,开源固件安全分析器, 开源口袋电源,开源健康测量,FreeCAD

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频&#xff1a; https://www.bilibili.com/video/BV1TYBhYKECK/ 《安富莱嵌入式周报》第346期&#xff1a;开源2GHz带…