JDK1.8新特性——lambda表达式和函数式接口

2023-11-09

一、lambda表达式

1、概念

  • Lambda表达式时一种特殊的匿名内部类,语法更加简洁。
  • Lambda表达式允许把函数作为一个方法的参数(函数作为方法参数传递),将代码像数据一样传递

        这里的匿名内部类的理解,我们可以在下述情况中来帮助大家了解。

        我们都知道,接口是不能直接进行new的,即接口没有实例对象。那么我们之前想要new对象是不是还需要写该接口的一个实现类,然后再去new这个接口实现类的实例对象?

        在某些情况下,我们想要的也许只是接口中的一个抽象方法,其他的内容对我们来说都不重要,那么我们可以直接用接口的匿名内部类的方法来“new 这个接口”。

 对于这个Runnable接口,我们可以直接new他的匿名内部类。

package demo01;

public class LambdaTest {
    public static void main(String[] args) {
        //匿名函数内部类
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名函数内部类");
            }
        }).start();
}

        对于这一部分,都是他的匿名内部类。Lambda表达式就是一种特殊的匿名内部类。他的语法更加简洁。

注意,想要将匿名内部类改写为Lambda表达式的前提是,该接口必须为函数式接口(接口中只能有一个抽象方法的接口称为函数式接口)

2、语法

<函数式接口> <变量名> = (参数1,参数2) ->{方法体};

 注意:

  • (参数1,参数2): 抽象方法的参数
  • ->: 分隔符
  • { }:表示抽象方法的实现

        我们还是用Runnable接口来举例子。Runnable接口就是一个函数式接口 

        下边的代码就是Lambda表达式。他完全等价于上边匿名内部类的代码。

        再强调一遍,想要使用Lambda表达式,该接口必须是函数式接口!

3、详细介绍Lambda表达式

    1.Lambda表达式引入了新的操作符:->(箭头操作符),该操作符将表达式分成了两部分:

    2.左侧:(参数1,参数2,...)表示参数列表(接口中抽象方法需要的参数列表)
    3.右侧:"{}"的内部是方法体
 

注意事项

    参数列表的数据类型会自动推断。我们在左侧括号内写参数列表时,不需要写参数的参数类型,直接写参数名即可。
    如果参数列表为空,我们只需要写一个()即可(例如上面的Runnable接口中的run方法就的参数列表就为空)
    如果参数列表只有一个,那么()可以省略,只需要写参数的名称即可
    如果执行的语句只有一句,且无返回值,那么“{ }”可以省略不写;如果执行语句有返回值且只有一句,那么在省略“{ }”的同时,也要省略掉“return”关键字
    Lambda不会生成一个单独的内部类文件

二、函数式接口 

1、概念

  • 如果一个接口只有一个抽象方法,则该接口称之为函数式接口,函数式接口可以使用lambda表达式,Lambda表达式会被匹配到这个抽象方法上
  • @FunctionalInterface 注解会检测接口是否符合函数式接口

 2、内置函数式接口 

        举个例子,我们想要用Lambda表达式来实现数组求和,就需要有一个函数式接口,那么我们就必须先定义一个函数式接口 

    @FunctionalInterface
    interface Operater{
        //求数组的和
        public abstract void getSum(int[] arr);
    }

        然后再实现我们的求和功能

public class Test {
 
    public static void main(String[] args) {
        Operater o=arr -> {
             int sum=0;
             for(int n:arr){
                 sum+=n;
             }
            System.out.println("数组的和为:"+sum);
        };
 
        fun(o);
    }
 
    public static void fun(Operater operater){
         int[] arr={2,3,4,5,6,7,11};
         operater.getSum(arr);
    }
 
}

        我们知道使用Lambda表达式的前提是需要有函数式接口。而Lambda使用时不关心接口名,抽象方法名,只关心抽象方法的参数列表和返回值类型。因此为了让我们使用Lambda方便,JDK提供了大量常用的函数式接口。这些接口都在java.util.function包下保存

        这四种函数式接口我们都举一个例子来方便大家理解:

        还是用我们的数组求和的代码。我们用Consumer,Supplier,Function这三种函数式接口对其进行改写,最后Predicate我们单独举个例子。

   自定义函数式接口实现数组求和的代码:

package FunctionalInterfaceTest;
 
/**
 * @作者:徐志豪
 * @创建时间 2022/7/19 20:03
 * 求数组的和 ---- 传统形式
 **/
public class TraditionalMethod {
    public static void main(String[] args) {
        Num num = (arr)->{
            int sum = 0;
            for (Integer integer : arr) {
                sum+=integer;
            }
            System.out.println(sum);
        };
        fun(num);
    }
 
    public static void fun(Num num){
        Integer[] arr = {1,2,3,4,5,6,7,8,9};
        num.getNum(arr);
    }
 
}
 
interface Num{
    public void getNum(Integer[] arr);
}

 2.1 Consumer<T> 消费型函数式接口 有参无返回值

T:参数类型的泛型

该函数式接口的抽象方法为  accept( 参数名 );

package FunctionalInterfaceTest;
 
import java.util.function.Consumer;
 
/**
 * @作者:徐志豪
 * @创建时间 2022/7/19 20:12
 * 求数组的和
 * 有参无返   消费型
 **/
public class ConsumerMethod {
    public static void main(String[] args) {
        Consumer<Integer[]> consumer = (arr)->{
            int sum = 0;
            for (Integer integer : arr) {
                sum+=integer;
            }
            System.out.println(sum);
        };
        Integer[] integers = {1,2,3,4,5,6,7,8,9};
        fun(consumer,integers);
    }
 
 
    public static void fun(Consumer<Integer[]> consumer,Integer[] arr){
        consumer.accept(arr);
    }
}

 2.2 Supplier<T> 供给型函数式接口 无参有返回值

T:返回结果的泛型

该函数式接口的抽象方法为    T   get( );

package FunctionalInterfaceTest;
 
import java.util.function.Supplier;
 
/**
 * @作者:徐志豪
 * @创建时间 2022/7/19 20:22
 * 求数组的和
 * 无参有返回值   供给型
 **/
public class SupplierMethod {
    public static void main(String[] args) {
        Supplier<Integer> supplier = ()->{
            Integer[] integers = {1,2,3,4,5,6,7,8,9};
            Integer sum = 0;
            for (Integer integer : integers) {
                sum+=integer;
            }
            return sum;
        };
        fun(supplier);
    }
 
    public static void fun(Supplier<Integer> supplier){
        Integer integer = supplier.get();
        System.out.println(integer);
    }
}

 2.3 Function<T,R> 函数型函数式接口  有参有返回值

T:参数类型的泛型

R:函数返回结果的泛型

其抽象方法为: R  apply( 参数名 )

package FunctionalInterfaceTest;
 
import java.util.function.Function;
 
/**
 * @作者:徐志豪
 * @创建时间 2022/7/19 20:28
 * 求数组的和/传入一个字符串,返回字符串的长度
 * 有参 有返回值   函数型
 **/
public class FunctionMethod {
    public static void main(String[] args) {
 
        //数组求和
        Function<Integer[],Integer> function = (arr)->{
            Integer sum = 0;
            for (Integer integer : arr) {
                sum+=integer;
            }
            return sum;
        };
        Integer[] arr = {1,2,3,4,5,6,7,8,9};
        fun(function,arr);
 
 
        //计算字符串的长度
        getLength(str->str.length(),"hello lambda");
    }
 
    //数组求和方法
    public static void fun(Function<Integer[],Integer> function,Integer[] arr){
        Integer apply = function.apply(arr);
        System.out.println(apply);
    }
 
    public static void getLength(Function<String,Integer> function,String str){
        Integer apply = function.apply(str);
        System.out.println("该字符串的长度为:"+apply);
    }
}

2.4 Predicated<T>  断言型函数式接口 有参,返回布尔值

T:参数类型的泛型

抽象方法: boolean test(参数名)

例子:判断传入字符串的长度是否大于10 

package FunctionalInterfaceTest;
 
import java.util.function.Predicate;
 
/**
 * @作者:徐志豪
 * @创建时间 2022/7/19 20:31
 * 判断字符串的长度是否大于10
 **/
public class PredicatedMethod {
    public static void main(String[] args) {
        NameIsBigThanThree(name->name.length()>10?true:false,"达拉崩吧版的本地不多秘鲁翁");
    }
 
    public static void NameIsBigThanThree(Predicate<String> predicate,String name){
        boolean test = predicate.test(name);
        System.out.println("该字符串长度大于10是"+test);
    }
}

 三、方法引用

1、lambda表达式的冗余 

        如果我们在Lambda中所指定的功能,已经有其他方法存在相同方案,那是否还有必要再写重复逻辑?可以直接“引 用”过去就好了:---方法引用。

public class Test01 {
 
    public static void main(String[] args) {
 
        Consumer<Integer[]> c=Test01::sum;
 
        fun(c);
    }
 
 
    public static void fun(Consumer<Integer[]>  consumer){
          Integer[] arr={1,2,3,4,5};
          consumer.accept(arr);
    }
 
    public static void sum(Integer[] arr){
          int sum=0;
          for (int a:arr){
              sum+=a;
          }
        System.out.println("数组的和为:"+sum);
    }
 
}

         请注意其中的双冒号 :: 写法,这被称为“方法引用”,是一种新的语法。

2、 什么是方法引用 

  方法引用的分类:

四种引用方法具体例子: 

2.1 静态方法引用 

类名::静态方法     代替-->      (参数)->类名.静态方法(参数) 

 对象类型数组或集合的排序:

package referencedByMethodsTest;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
 
/**
 * @作者:徐志豪
 * @创建时间 2022/7/19 20:42
 * 排序
 **/
public class StaticMethodReferencedTest {
    public static void main(String[] args) {
 
        //Person数组
        Person[] ps ={new Person("张三",18),new Person("李四",25),new Person("王五",20),new Person("张三",19)};
        Arrays.sort(ps,Person::compareTo);
        for (Person p : ps) {
            System.out.println(p+"```````数组````````");
        }
 
        //Person集合
        List<Person> list = new ArrayList<>();
        list.add(new Person("张三",51));
        list.add(new Person("李四",35));
        list.add(new Person("王五",27));
        list.add(new Person("赵六",60));
        list.sort(Person::compareTo);
        for (Person person : list) {
            System.out.println(person+"========集合======");
        }
    }
}
 
class Person{
    private String name;
    private Integer age;
 
    public Person() {
    }
 
    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    //自定义排序方法
    public static int compareTo(Person o1,Person o2){
        return o2.age - o1.age;
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
}

 2.2  实例方法引用

对象::实例方法      代替-->      (参数)->对象.实例方法(参数)

        实例方法引用,顾名思义就是调用已经存在的实例的方法,与静态方法引用不同的是类要先实例化,静态方法引用类无需实例化,直接用类名去调用。  

 例子和静态方法引用里面的例子相同,注意二者的区别

package referencedByMethodsTest;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
/**
 * @作者:徐志豪
 * @创建时间 2022/7/19 21:24
 **/
public class InstanceMethodReferencedTest {
    public static void main(String[] args) {
        //people数组排序
        People[] people = {new People("张三",15),new People("李四",27),new People("王五",19),new People("赵六",35)};
        People people1 = new People();
        //实例方法引用
        Arrays.sort(people,people1::compareTo);
        for (People people2 : people) {
            System.out.println(people2+"------数组排序-----");
        }
 
        //people集合排序
        List<People> list = new ArrayList<>();
        list.add(new People("张三",55));
        list.add(new People("李四",37));
        list.add(new People("王五",68));
        list.add(new People("赵六",25));
        list.sort(people1::compareTo);
        for (People people2 : list) {
            System.out.println(people2+"++++++集合排序++++++");
        }
    }
 
}
 
class People {
    private String name;
    private Integer age;
 
    public People() {
    }
 
    public People(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    //自定义排序方法
    public int compareTo(People o1, People o2){
        return o2.age - o1.age;
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
}

2.3 对象方法引用

类名::实例方法          代替-->          (参数1,参数2)->参数1.实例方法(参数2)     

package test.methodReference;
 
import java.util.function.BiFunction;
import java.util.function.Function;
 
/**
 * @作者:徐志豪
 * @创建时间 2022/7/20 19:59
 * 对象引用方法     类::实例方法    替换   (参数1,参数2)->参数1.实例方法(参数2)
 **/
public class ObjectReferenceMethod {
    public static void main(String[] args) {
        //比较两个字符串的值是否相等
        //Lambda表达式方法
        BiFunction<String,String,Boolean> function = (t1,t2)->t1.equals(t2);
        Boolean apply = function.apply("hello", "hello");
        System.out.println(apply);
        //对象引用方法
        BiFunction<String,String,Boolean> function1 = String::equals;
        Boolean apply1 = function1.apply("hello", "hello");
        System.out.println(apply1);
 
        //计算字符串的长度
        //lambda表达式
        Function<String,Integer> function2 = (str)->str.length();
        Integer hello_world = function2.apply("hello world");
        System.out.println(hello_world);
        //对象引用方法
        Function<String,Integer> function3 = String::length;
        Integer hello_world1 = function3.apply("hello world");
        System.out.println(hello_world1);
    }
}

 2.4 构造方法引用

类名::new                 代替-->          (参数)->new 类名(参数)           

package test.methodReference;
 
import java.util.function.BiFunction;
import java.util.function.Function;
 
/**
 * @作者:徐志豪
 * @创建时间 2022/7/20 20:09
 *  构造方法引用   类名::new   替换   (参数)->new  类名(参数)
 **/
public class ConstructorReferenceMethod {
    public static void main(String[] args) {
        //(1) new String
        //Lambda表达式
        Function<String,String> function = (str)->new String(str);
        String hello_world = function.apply("hello world");
        System.out.println(hello_world);
        //构造方法引用
        Function<String,String> function1 = String::new;
        String hello_world1 = function1.apply("hello world");
        System.out.println(hello_world1);
 
 
        //(2) new Person
 
        //lambda表达式
        BiFunction<String,Integer,Person> biFunction = (name,age)->new Person(name,age);
        Person p = biFunction.apply("张三", 18);
        System.out.println(p);
        //构造方法引用
        BiFunction<String,Integer,Person> biFunction1 = Person::new;
        System.out.println(biFunction1.apply("张三",18));
    }
}
class Person{
    private String name;
    private Integer age;
 
    public Person() {
    }
 
    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDK1.8新特性——lambda表达式和函数式接口 的相关文章

  • git config --global user.email 重新安装后不会让我更改电子邮件

    嘿 我完全重新安装了 Github 删除了所有文件 现在我再次安装了它 但是当我尝试设置它时 我遇到了一些问题 git config global user email 电子邮件受保护 cdn cgi l email protection
  • Jenkins 和 Github 不使用 SSH 密钥

    我已将 Jenkins 设置为从 Github 上的私有存储库中提取特定作业 尽管我已经生成了私钥 公钥并将其作为部署密钥添加到 github 但 Jenkins 似乎并未使用 SSH 密钥 当我从 Jenkins 用户进行 git clo
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • TypeScript的数组和元组

    数组 在TypeScript中数组的定义与JavaScript中别无二致 但是JavaScript中的数组具有很大灵活性 即数组内可以存储任意类型数据 那么在TypeScript中能不能做到呢 答案是肯定的 const arr string
  • Java学习笔记17——多态与抽象

    多态与抽象 多态 多态是什么 多态的前提和体现 多态中成员访问的特点 多态的好处和弊端 多态中的转型 分类 抽象类 什么是抽象类 抽象的关键字 抽象类的特点 抽象类的成员特点 多态 多态是什么 多态是同一个对象 在不同时刻表现出来的不同形态
  • 【华为机试刷题笔记】HJ41-称砝码

    题目描述 现有n种砝码 重量互不相等 分别为 m1 m2 m3 mn 每种砝码对应的数量为 x1 x2 x3 xn 现在要用这些砝码去称物体的重量 放在同一侧 问能称出多少种不同的重量 注 称重重量包括 0 数据范围 每组输入数据满足 1
  • 自学Python爬虫学到什么程度?就可以去找工作了?

    确立目标 了解需求 首先我们要先定位自己的目标 当然我们先以爬虫工程师来做个说明 去招聘网上看看需求都有哪些 直接做个拉勾网爬虫 结果了 仔细看看 我们可以得出以下几点 1 python 不是唯一可以做爬虫的 很多语言都可以 尤其是 jav
  • 从零开发区块链应用(七)--gin框架参数获取

    文章目录 一 获取query参数 二 获取form表单参数 三 获取JSON参数 四 获取path参数 五 参数绑定 一 获取query参数 query指的是URL 后面携带的参数 例如user info username 张三 passw
  • 大白话Java版 TCP Socket编程案例 清晰明了

    最近学习网络的过程中 了解到了应用借助socket接口在tcp上建立连接 发送请求的过程 遂做个记录 文章目录 整体流程 服务端 1 创建套接字绑定端口 2 等待接收请求 4 获取请求 ConnectSocket建立 6 读请求并处理 8
  • TCP拥塞控制简单理解

    1 TCP的控制机制 序号 TCP通过序号可以实现一下几个功能 1 确认应答处理 发送端收到接收端的确认应答 可以得知某些数据包被接收端接收了 2 顺序控制 接收端可以利用序号对接收到的报文进行排序 3 重发控制 如果发送端没有收到确认应答
  • localStorage的高阶用法

    原文 https mp weixin qq com s VBTAWVMAUq822dwNA1A2kg const config type localStorage 本地存储类型 localStorage sessionStorage pre
  • vue项目使用element、vant组件库修改不了css样式 深度修改组件样式

    在修改element vant默认样式时发现用 important都没有效果 解决方案 第一种 直接把style的scoped去掉
  • 人工智能中非平衡数据处理方法、欠采样、过采样讲解(简单易懂)

    非平衡数据产生现象及原因 非平衡数据是人工智能安全中经常遇到的问题 一方面 在采集和准备数据时 由于安全事件发生的可能性不同等因素的影响 使得训练数据存在非平衡 另一方面 机器学习模型的攻击者也可能利用非平衡数据学习所产生的分类效果在多数类
  • springboot集成积木报表JimuReport,打成war包放到tomcat下运行报错,启动过滤器异常

    springboot集成积木报表JimuReport 打成war包放到tomcat下运行报错 启动过滤器异常 这里用的tomcat8 5 这个问题真是找了半天都没解决 真是栓Q啊 把war包放到tomcat9 0下运行 就正确了 一定注意
  • 初学者必看Markdown 使用指南

    什么是 Markdown Markdown 文档遵循一种特定的语法 容易阅读和写作 它们是纯文本 所以能够通过电脑上的任何文本编辑器来创建 然后这些文档能够转换成网页 而网页是用一个叫做 HTML 的语言标记创建的 Markdown 只是一
  • Microsoft Office 2003的安装

    哈喽 大家好 今天一起学习的是office2003的安装 这个老版本的office可是XP操作系统的老搭档了 有兴趣的小伙伴也可以来一起试试手 一 测试演示参数 演示操作系统 Windows XP 不建议win7及以上操作系统使用 系统类型
  • 文件使用磁盘的实现--OS

    文件使用磁盘的实现 通过文件使用磁盘 代码如下 在fs read write c中 int sys write int fd const char buf int count fd为文件索引 buf为缓冲区 count表示要处理的字符串长度
  • 图的遍历(BFS和DFS)

    一 遍历 lt 1 gt 遍历 把所有元素都看一遍 每看到一个元素 针对条件进行处理 lt 2 gt 线性逻辑 顺序存储 void fun1 type data int num for int i 0 i lt num i 逐个处理 typ
  • QT 通信之 QByteArray

    QT上位机的串口通信发送和接收数据都需要用到QByteArray QByteArray存储的是char型字符 但QByteArray提供的数组操作 比char更方便 这篇文章主要讲一下QByteArray在实际应用中的一些函数 以及QBby
  • 机器学习5:评估器estimator

    要定义与tf estimator一起使用的自定义模型 需要使用tf estimator Estimator tf estimator LinearRegressor 线性回归实际上是一个tf estimator Estimator的子类 我
  • ASCII码对照表(十进制和十六进制)

    表 A 1 DEC 多国字符集 十六进制代码 MCS 字符或缩写 DEC 多国字符名 ASCII 控制字符 1 00 NUL 空字符 01 SOH 标题起始 Ctrl A 02 STX 文本起始 Ctrl B
  • CentOS下载ISO镜像的方法

    目录 一 CentOS 介绍 二 进入CentOS 官方网站 三 步骤 一 CentOS 介绍 CentOS 中文意思是社区企业操作系统是Linux发行版之一 是免费的 开源的 可以重新分发的开源操作系统 CentOS Linux发行版是一
  • JDK1.8新特性——lambda表达式和函数式接口

    一 lambda表达式 1 概念 Lambda表达式时一种特殊的匿名内部类 语法更加简洁 Lambda表达式允许把函数作为一个方法的参数 函数作为方法参数传递 将代码像数据一样传递 这里的匿名内部类的理解 我们可以在下述情况中来帮助大家了解