Stream流

2023-11-08

Stream流

Stream(流)是一个来自数据源的元素队列并支持聚合操作:

  1. 元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而 是按需计算。
  2. 数据源 流的来源。 可以是集合,数组等。
  3. 聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted 等。

1. Stream流操作的三个步骤:

  1. 创建Stream

    一个数据源(如:集合、数组),获取一个流

  2. 中间操作

    一个中间操作链,对数据源的数据进行处理

  3. 终止操作

    一个终止操作,执行中间操作链,并产生结果

1.1 创建Stream步骤:

  • 通过Collection系列集合提供的顺序流stream()或并行流parallelStream()
  • 通过Arrays中的静态方法stream()获取数据流
  • 通过Stream类中的静态方法of()

代码实例

package com.ysh.review01_Stream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StreamTest01 {
    public static void main(String[] args) {
        //第一种方式:通过集合中的stream()方法创建Stream
        List<String> list= Arrays.asList("红太狼","灰太狼","喜羊羊");
        Stream<String> stream=list.stream();
        //通过集合中的parallelStream方法创建
        Stream<String> stream2 = list.parallelStream();
        //第二种方式:通过java.util.Arrays下的静态方法stream创建Stream
        Integer[] integer=new Integer[]{1,2,4};
        //这里需要注意的是Arrays中的stream方法里面的参数需要一个数组,且数组的类型是一个引用类型或者是一个包装类
        Stream<Integer> stream3 = Arrays.stream(integer);
        //第三种方式:通过Stream中的of方法,实际上这种方式创建Stream实际上间接的通过调用Arrays中的stream()静态方法
        Stream<String> stream4=Stream.of("a","b","c");
    }
}

1.2 Stream的中间操作

1.2.1. 筛选和切片

filter:过滤器

package com.ysh.review01_Stream;

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

public class StramTest02 {
    public static void main(String[] args) {
        Employee employee01=new Employee("yang","hui",29);
        Employee employee02=new Employee("yang","hui",49);
        Employee employee03=new Employee("yang","hui",9);
        Employee employee04=new Employee("yang","hui",89);
        Employee employee05=new Employee("yang","hui",89);
        Employee employee06=new Employee("yang","hui",89);
        List<Employee> list= Arrays.asList(employee01,employee02,employee03,employee04,employee05,employee06);
        //创建Stream
        Stream<Employee> stream1 = list.stream();
        //对stream1流进行过滤
        Stream<Employee> s = stream1.filter((e) -> {
            System.out.println("---------------filter------------");
            //过滤掉年龄小于19
            return e.getAge() >= 19;
        });
        s.forEach((e-> System.out.println(e)));
    }
}
class Employee {
    private String id;
    private String name;
    private int age;

    public Employee() {

    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Employee employee = (Employee) o;
        return age == employee.age &&
                id.equals(employee.id) &&
                name.equals(employee.name);
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}


运行结果

在这里插入图片描述

skip(n):指跳过Stream中存储的前n条数据(包含第n条数据),返回后n条数据,如果n大于Stream中所有元素的个数,则返回空;(Employee类如上)

package com.ysh.review01_Stream;

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

public class StramTest02 {
    public static void main(String[] args) {
        Employee employee01=new Employee("yang","hui",9);
        Employee employee02=new Employee("yang","hui",49);
        Employee employee03=new Employee("yang","hui",9);
        Employee employee04=new Employee("yang","hui",89);
        Employee employee05=new Employee("yang","hui",89);
        Employee employee06=new Employee("yang","hui",89);
        List<Employee> list= Arrays.asList(employee01,employee02,employee03,employee04,employee05,employee06);
        //创建Stream
        Stream<Employee> stream1 = list.stream();
        //对stream1流进行过滤
        Stream<Employee> s = stream1.filter((e) -> {
            System.out.println("---------------filter------------");
            //过滤掉年龄小于19
            return e.getAge() >= 19;
        }).skip(2);
        //s=s.skip(5);
        s.forEach((e-> System.out.println(e)));
    }
}

运行截图

在这里插入图片描述

distinct:筛选重复的元素,通过流生产元素的hashCode()和equals去除重复元素;

package com.ysh.review01_Stream;

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

public class StramTest02 {
    public static void main(String[] args) {
        Employee employee01=new Employee("yang","hui",9);
        Employee employee02=new Employee("yang","hui",49);
        Employee employee03=new Employee("yang","hui",9);
        Employee employee04=new Employee("yang","hui",89);
        Employee employee05=new Employee("yang","hui",89);
        Employee employee06=new Employee("yang","hui",89);
        List<Employee> list= Arrays.asList(employee01,employee02,employee03,employee04,employee05,employee06);
        //创建Stream
        Stream<Employee> stream1 = list.stream();
        //对stream1流进行过滤
        Stream<Employee> s = stream1.filter((e) -> {
            System.out.println("---------------filter------------");
            //过滤掉年龄小于19
            return e.getAge() >= 19;
        }).skip(2).distinct();
        //s=s.skip(5);
        s.forEach((e-> System.out.println(e)));
    }
}

运行截图:

在这里插入图片描述

排序

sorted(Comparable)–自然排序

package com.ysh.review01_Stream;

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

public class StreamTest03 {
    public static void main(String[] args) {
        List<String> list= Arrays.asList("c","bbb","abc","bbbb");
        Stream<String> stream = list.stream();
        //即通过调用String方法中CompareTo,通过一个一个的比较字符的ASCLL值,首先比较首字符的ASCLL大小,相同的话再比较下一个
        stream= stream.sorted();
        stream.forEach(System.out::println);
    }
}

sorted(Comparator)–定制排序

package com.ysh.review01_Stream;

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

public class StramTest02 {
    public static void main(String[] args) {
        Employee employee01=new Employee("yang","哈哈",19);
        Employee employee02=new Employee("yang","hui",49);
        Employee employee03=new Employee("yang","hui",79);
        Employee employee04=new Employee("yang","呵呵呵",79);
        Employee employee05=new Employee("yang","hui",39);
        Employee employee06=new Employee("yang","hui",29);
        List<Employee> list= Arrays.asList(employee01,employee02,employee03,employee04,employee05,employee06);
        //创建Stream
        Stream<Employee> stream1 = list.stream();
        //对stream1流进行过滤
        Stream<Employee> s = stream1.filter((e) -> {
            System.out.println("---------------filter------------");
            //过滤掉年龄小于19
            return e.getAge() >= 19;
        });
        //s=s.skip(5);
        /*此处可以使用Lambda表达式,即s.sorted((o1,o2)->{
                              //升序排序,如果年龄相同,则按照姓名的长度排序 
                                         if (o1.getAge()==o2.getAge()){
                                            return o1.getName().length()-o2.getName().length();
                                     }
                                      //按照年龄升序排序
                                      return o1.getAge()-o2.getAge();
                        
                          })
        
         */
        s=s.sorted(new Comparator<Employee>() {
            @Override
            public int compare(Employee o1, Employee o2) {
                //升序排序,如果年龄相同,则按照姓名的长度排序
                if (o1.getAge()==o2.getAge()){
                    return o1.getName().length()-o2.getName().length();
                }
                //按照年龄升序排序
                return o1.getAge()-o2.getAge();
            }
        });
        s.forEach((e-> System.out.println(e)));
    }
}

Stream中的map和flatMap方法

  • map() 流中的每一个数据,当做map方法的参数(接口),接口中抽象方法的参数,进行制定操作,最终得到一个结果,最后所有的结果返回去成为一个流
  • flatMap()流中的每一个数据当作参数,进行操作,得到的结果必须是一个流,最终会结合成一个流返回
package com.ysh.review01_Stream;

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

public class StreamTest04 {
    public static void main(String[] args) {
        Stream<String> stream=Stream.of("aaa","bbbb","ccccc");
        //map方法是每一个数据当作一个流,即以上{aaa}、{bbbb}、{ccccc}各是一个Stream<Character>流集合,即达到得到多个Stream<Character>流集合
        //可以理解为Stream流中包含Stream<Character>流
        //因为这里的testCharacter()的方法我返回的是一个Stream<Character>
        //Stream<Stream<Character>> streamStream = stream.map((e) -> testCharacter(e));
        Stream<Stream<Character>> streamStream = stream.map((e) -> {
            List<Character> list = new ArrayList<>();
            for (Character c : e.toCharArray()) {
                list.add(c);
            }
            return list.stream();
        });
        streamStream.forEach((e)->{
            e.forEach((e2)->{
                System.out.println(e2);
            });
        });
        Stream<String> stm=Stream.of("aaa","bbbb","ccccc");
        //flatMap()方法即是把将得到的多个Stream<Character>流集合合并为一个一个Stream<Character>流集合
        Stream<Character> stream1=stm.flatMap(StreamTest04::testCharacter);
        //streamStream.forEach(System.out::println);
        System.out.println("---------------");
        stream1.forEach(System.out::println);
    }
    //返回一个Stream
    public static Stream<Character> testCharacter(String str){
        List<Character> list=new ArrayList<>();
        for (Character c:str.toCharArray()){
            list.add(c);
        }
        Stream<Character> stream=list.stream();
        return stream;
    }
}

3. 终止操作

3.1 查找与匹配

  • allMatch:检查是否匹配所有元素;
  • anyMatch:检查是否至少匹配一个元素;
  • noneMatch:检查是否没有匹配所有元素;
  • findFirst:返回第一个元素;
  • findAny:返回当前流中的任意元素;
  • count:返回流中元素的总个数;
  • max:返回流中最大值;
  • min:返回流中最小值;

代码实例

package com.ysh.review01_Stream;

import java.util.Optional;
import java.util.stream.Stream;

/**
 * Stream中的终止操作
 */
public class StreamTest06 {
    public static void main(String[] args) {
        //获取Stream
        Stream<String> stm1=Stream.of("aaaaaa","bbbbb","cccccc","dd","eee");
        //allMatch()方法里面的参数是一个断言式接口,即实现必须重写test()方法
        boolean b1 = stm1.allMatch((t) -> {
            //检查是否匹配所有元素
            return t.length() > 2;
        });
        Stream<String> stm2=Stream.of("aaaaaa","bbbbb","cccccc","dd","eee");
        boolean b2=stm2.anyMatch((t) -> {
            //检查是否至少匹配一个元素
            return t.length() > 2;
        });
        Stream<String> stm3=Stream.of("aaaaaa","bbbbb","cccccc","dd","eee");
        boolean b3=stm3.noneMatch((t) -> {
            //检查是否没有匹配所有元素
            return t.length() > 2;
        });
        Stream<String> stm4=Stream.of("aaaaaa","bbbbb","cccccc","dd","eee");
        //得到流中的第一个元素
        Optional<String> first = stm4.findFirst();
        //输出
        System.out.println(first.get());
        Stream<String> stm5=Stream.of("aaaaaa","bbbbb","cccccc","dd","eee");
        //返回当前流中的任意元素
        Optional<String> any = stm5.findAny();
        System.out.println(any.get());
        Stream<String> stm6=Stream.of("aaaaaa","bbbbb","cccccc","dd","eee");
        //放回流中元素的总个数
        long count = stm6.count();
        System.out.println(count);
        Stream<String> stm7=Stream.of("aaaaaa","bbbbb","cccccc","dd","eee");
        //返回流中最大值,即长度最长,长度相同则比较ASCLL值大小
        Optional<String> max = stm7.max((s1, s2) -> {
            if (s1.length()==s2.length()){
                return s1.compareTo(s2);
            }
            return s1.length() - s2.length();
        });
        System.out.println(max.get());
        Stream<String> stm8=Stream.of("aaaaaa","bbbbb","cccccc","dd","eee");
        //返回流中最小值,即长度最短,长度相同则比较ASCLL值大小
        Optional<String> min = stm8.min((s1, s2) -> {
            if (s1.length() == s2.length()) {
                return s2.compareTo(s1);
            }
            return s1.length() - s2.length();
        });
        System.out.println(min.get());
        System.out.println(b3);
    }
}

收集:

收集-将流转换为其他形式,接收一个Collertor接口的实现,用于给Stream中元素做 汇总的方法

  • List:把流中所有元素收集到List中,使用.collect(Collectors.toList());
  • Set:把流中所有元素收集到Set中,删除重复项,使用.collect(Collectors.toSet());
  • Map:把流中所有元素收集到Map中,当出现相同的key时会抛异常,使用 .collect(Collectors.toMap());
  • 使用collect方法求流中共有几条数据,使用.collect(Collectors.counting())
  • 使用collect方法求平均数,使用.collect(Collectors.averagingInt();
  • 使用collect方法求某个变量的总和,使用.collect(Collectors.summingDouble());
  • 使用collect方法且某个变量中值的最大值,使用.collect(Collectors.maxBy());

代码实例

package com.ysh.review01_Stream.one;

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

public class StreamTest07 {
    public static void main(String[] args) {
        Student stu1=new Student("1","hhhh",18);
        Student stu2=new Student("2","hhhhh",19);
        Student stu3=new Student("3","oooooo",19);
        Student stu4=new Student("4","aaaaa",19);
        List<Student> list = Arrays.asList(stu1,stu2,stu3,stu4);
        //获取所有学生的姓名流,并且存储再List集合中
        List<String> collect = list.stream().map((e) -> {
            return e.getName();
        }).collect(Collectors.toList());
        System.out.println(collect);
        Set<String> set = list.stream().map((e) -> {
            return e.getName();
        }).collect(Collectors.toSet());
        System.out.println(collect);
        //将学生的姓名和年龄放入到一个集合中,当出现相同的key是会抛出一个java.lang.IllegalStateException: Duplicate key异常
        Map<String, Integer> map = list.stream().collect(Collectors.toMap((e) -> e.getName(), (e2) -> e2.getAge()));
        System.out.println(map);
        //运用collect输出所有学生的总数
        Long count2 = list.stream().collect(Collectors.counting());
        System.out.println(count2);
        //运用collect方法计算所有学生的平均年龄
        Double collect1 = list.stream().collect(Collectors.averagingDouble((n) -> n.getAge()));
        System.out.println(collect1);
        //运用collect方法求所有学生的年龄之和
        int agesum=list.stream().collect(Collectors.summingInt((e)->e.getAge()));
        System.out.println(agesum);
        //运用collect方法求所有学生中年龄最大的
        Optional<Student> max2 = list.stream().collect(Collectors.maxBy((a1, a2) -> a1.getAge() - a2.getAge()));
        System.out.println(max2.get());


    }
}
class Student {
    private String id;
    private String name;
    private int age;
    public Student(){

    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                id.equals(student.id) &&
                name.equals(student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, age);
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Stream流 的相关文章

  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static

随机推荐

  • 目标识别算法C语言,大盘点

    原标题 大盘点 性能最强的目标检测算法 来源 CVer ID CVerNews 作者 Amusi 整理编辑 三石 新智元导读 目标检测中存在两个非常重要的性能 精度和速度 特指mAP和FPS 本文便对mAP最高的目标检测算法进行了盘点 趁最
  • [ 搞一点AutoSar ]一张图帮你理解CAN通信全过程

    笔者最近一直在学习AUTOSAR 通信部分的相关知识 经过长时间的学习有了一个大概的了解 但一直感觉资料介绍的东西都很零散 不是很全面 这样子无法建立一个完整的知识体系 于是笔者查阅各种资料 加上自己的一点理解 制作了CAN通信部分从软件到
  • python输入输入:input、map

    主要整理python中输入输出用到的几个函数 print函数 print函数是python中常用到的一个函数 关于print的用法这里是详细的一些介绍 input函数 input函数的用法如下 x input 提示信息 input得到的值是
  • 【期末复习】UML

    五类视图 五类图 用例视图 逻辑视图 并发视图 组件视图 部署视图 九种图形 用例图 唯一有用户参加的图 静态图 类图 对象图 行为图 状态图 活动图 交互图 顺序图 时序图 协作图 通信图 实现图 组件图 构件图 部署图 活动图 唯一表示
  • vue将后端获取到的路由,通过 addRouter 动态添加。

    获取路由参数 将路由添加到路由集合中去 获取 路由信息 axios post api mock getMenu then resp gt let datas resp data 遍历获取到的路由数组将其添加到全局路由中 datas forE
  • vue之watch的用法

    一 什么是watch watch 用于监听data里面的数据是否被修改 一旦修改就可以执行一些其他的操作 也是方法 二 watch的用法 watch在监听的时候 可以有二次参数 第一次参数为更新的数据 第二个参数为之前的旧数据 div h1
  • 广电家庭服务器维修电话,广电家庭服务器换路由器怎么设置

    广电家庭服务器换路由器怎么设置 内容精选 换一换 用户的弹性云服务器已绑定EIP 但是无法连接到Internet 弹性云服务器通过EIP访问Internet的流程如图1所示 本问题请按照以下思路进行排查处理 查看弹性云服务器运行是否正常查看
  • HBase 二级索引的设计 (案例讲解)

    HBase 二级索引的设计 案例讲解 最近做的一个项目涉及到了多条件的组合查询 数据存储用的是HBase 恰恰HBase对于这种场景的查询特别不给力 一般HBase的查询都是通过RowKey 要把多条件组合查询的字段都拼接在RowKey中显
  • SQL Server 2016新特性:DROP IF EXISTS

    在我们写T SQL要删除某个对象 表 存储过程等 时 一般会习惯先用IF语句判断该对象是否存在 然后DROP 比如 旧版本 IF OBJECT ID dbo PERSON U IS NOT NULL DROP TABLE PERSON IF
  • element-plus中el-sub-menu样式修改

    注意
  • 二分查找(代码实例)

    基本思路 当我们要从一个序列中查找一个元素的时候 最快想到的方法就是顺序查找法 即 从前到后依次查找 但这种方法过于无脑 就是暴力的把每个元素都排查一遍 元素个数少的时候还行 一旦元素个数多起来 效率是非常低下 所以在实际中这种查找的方法是
  • 前程无忧招聘信息爬取

    爬取前程无忧招聘信息 本文是关于招聘数据爬取 我们选取的网站是前程无忧 百度直接搜索前程无忧 或者51job 我们将看到搜索栏 在搜索栏中输入 数据分析师 将可以看到工作信息 至于分析网站在这里就不在解释了 本爬虫只是简单爬取一点数据 所以
  • 计算机怎么盲打键盘,如何练习盲打 键盘盲打指法练习技巧-电脑教程

    很多人在电脑上打字都还需要看着键盘 不会盲打 看到电脑高手噼里啪啦的打字速度着实令人羡慕 很多小白朋友所自己笨 不会盲打 其实不会盲打并不是因为笨 而是没找到一种简单易行的练习方法 按照标准指法 看着键盘按照从A到Z的顺序打26个字母 最多
  • Mysql多对多关系,分组拼接把多个数据查询到一条数据上

    GROUP CONCAT str 分组字符串拼接 与分组一起使用 案例 查询企业信息以及企业分类信息 其中企业分类信息和企业是多对多的关系 按普通的联表查询 我们会查询到一条企业信息对应多个企业分类 会出现多个记录 如果想实现把同一个企业的
  • 全面理解java中的构造方法以及this关键字的用法(超详细)

    Hello 各位铁汁们 我是小 儿哈 今天我又来更新我的Java基础学习博客了 本篇主要内容概述 1 如何用构造方法初始化对象 2 为啥要有this这个关键字 3 this 属性名访问成员变量 成员方法 4 this 方法名 this 的用
  • Pandas进阶筛选和取数操作

    总结了pandas各种进阶操作与使用技巧 并且对各方法间的效率进行比较 创建一个pandas的dataframe对象作为下文样例 import pandas as pd import numpy as np df pd DataFrame
  • 陀螺研究院:《2019年分布式金融商业趋势及落地情况分析报告》

    2018年末开始 以DeFi为代表的分布式金融 在业内引起了广泛的讨论 传统的金融模式以中央银行 商业银行 非银金融机构为核心展开支付 借贷 保险等场景内的应用 但DeFi彻底摆脱了原有的核心 以分布式账本作为清算依据 从而降低了金融服务中
  • 前馈全连接神经网络和函数逼近、时间序列预测、手写数字识别

    https www cnblogs com conmajia p annt feed forward fully connected neural networks html 前馈全连接神经网络和函数逼近 时间序列预测 手写数字识别 And
  • springboot中JDBC连接超时问题

    最近项目中有一个问题 电子保卡信息要写入数据库 但写入失败 报错 息是这样的 The last packet successfully received from the server was 57 704 088 milliseconds
  • Stream流

    Stream流 Stream 流 是一个来自数据源的元素队列并支持聚合操作 元素是特定类型的对象 形成一个队列 Java中的Stream并不会存储元素 而 是按需计算 数据源 流的来源 可以是集合 数组等 聚合操作 类似SQL语句一样的操作