Java补充(Java8新特性)(和IO都很重要)

news2025/6/4 3:00:03

一、Lambda表达式

1.1、为什么使用Lambda表达式 Lambda表达式起步案例

下面源码注释是传统写法,代码是简写表达式写法

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.function.Consumer;

/*
* 学什么?
*   1、Lambda表达式
*   2、Stream API
*   3、Optional类 NullPointerException
* 目前存在的问题?
*   方法不能作为参数传递
* 如何解决这个问题?
*   行为参数化
* */
public class MyTest02 {
    public static void main(String[] args) {
        //匿名内部类
        /*Thread th1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello Java8");
            }
        });
        th1.start();*/
        Thread th1 = new Thread(() -> {
            System.out.println("hello Java8");
        });
        th1.start();

        ArrayList<String> list = new ArrayList<String>();
        list.add("111111");
        list.add("11");
        list.add("11222");
        list.add("1");

        /*Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //return o1.length() - o2.length();
                return Integer.compare(o1.length(), o2.length());
            }
        });*/
        // -> 后省略了大括号和return 还有o1,o2的String
        Collections.sort(list, (o1,o2) -> Integer.compare(o1.length(), o2.length()));
        System.out.println(list);

        /*list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {//s -- 每次被遍历到的元素
                System.out.println(s);
            }
        }); 下面是简写后的*/
        list.forEach(s -> System.out.println(s));
        list.forEach(System.out::println);
    }
}

1.2、Lambda表达式写法

Lambda表达式是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格。使Java的语言表达能力得到了提升。

语法:

Lambda表达式操作符或箭头操作符:->

左侧:指定了Lambda表达式需要的参数列表(其实就是接口中的抽象方法的形参列表)

右侧:指定了Lambda体,是抽象方法的实现逻辑,也即Lambda表达式要执行的功能(其实就是重写的抽象方法的方法体)。

先把匿名内部类的对象找出来,再看方法参数和方法体

即源码

package day33;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.function.Consumer;

/*
* 学什么?
*   1、Lambda表达式
*   2、Stream API
*   3、Optional类 NullPointerException
* 目前存在的问题?
*   方法不能作为参数传递
* 如何解决这个问题?
*   行为参数化
* Lambda表达式
*   -> Lambda操作符或箭头操作符
*   左侧:方法的参数列表
*   右侧:方法的方法体
*   方法:重写的方法
* Lambda表达式简写/进阶写法
*   1、如果参数列表没有参数,要写成()
*   2、如果参数列表有参数
*     参数个数>=2 (数据类型1 参数名1,数据类型2 参数名2,数据类型3 参数名3)
*     参数个数>=2 (参数名1, 参数名2,参数名3) !!!!!
*     只有一个参数 (数据类型 参数名)
*     只有一个参数 (参数名)
*     只有一个参数 参数名 !!!!!
*   3、右侧 - 如果方法体有多行代码,必需写{}
*   4、右侧 - 如果方法体只有一行代码,不用写{},不用写return,不用写结尾的";"
 * */
public class MyTest02 {
    public static void main(String[] args) {
        //匿名内部类
        /*Thread th1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello Java8");
            }
        });
        th1.start();*/
        Thread th1 = new Thread(() -> {
            System.out.println("hello Java8");
        });
        th1.start();

        ArrayList<String> list = new ArrayList<String>();
        list.add("111111");
        list.add("11");
        list.add("11222");
        list.add("1");

        /*Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //return o1.length() - o2.length();
                return Integer.compare(o1.length(), o2.length());
            }
        });*/
        // -> 后省略了大括号和return 还有o1,o2的String
        Collections.sort(list, (o1,o2) -> Integer.compare(o1.length(), o2.length()));
        System.out.println(list);

        /*list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {//s -- 每次被遍历到的元素
                System.out.println(s);
            }
        }); 下面是简写后的*/
        list.forEach(s -> System.out.println(s));
        list.forEach(System.out::println);
    }
}

1.3、函数式接口_@Functional注解

@FunctionalInterface
@Override
作用:编译器帮我们检查标注了该注解的接口是不是函数式接口
      |-- 是 -- 编译通过
      |-- 不是 -- 无法编译通过
      注意:该注解的作用只是检查的作用,可以不写

相关源码显示:

package day33;

public class MyTest03 {
    public static void aaa(MyInterface a, int m , int n) {
        a.test(m,n);
    }

    public static void main(String[] args) {
        /*aaa(new MyInterface() {
            @Override
            public void test(int a, int b) {
                System.out.println(a + ":" + b);
            }
        },1,2);*/
        aaa((a,b) -> System.out.println(a + ":" + b),1,2);
    }
}
package day33;

@FunctionalInterface
public interface MyInterface {
    void test(int a , int b);
    //唯一的一个抽象方法
}

———————自己定义的,Java官方也有

1.4、函数式接口_常见函数式接口说明

1.5、复合的Lambda表达式

 比较器复合 和 谓词复合

package day34;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.function.Predicate;

//比较器复合
public class MyTest02 {
    public static void main(String[] args) {
        ArrayList<Apple> list = new ArrayList<>();

        list.add(new Apple(150,"red"));
        list.add(new Apple(210,"red"));
        list.add(new Apple(300,"yellow"));
        list.add(new Apple(90,"green"));
        list.add(new Apple(90,"yellow"));
        list.add(new Apple(100,"green"));
        list.add(new Apple(123,"red"));

        //按照重量降序排序
        //list.sort(Comparator.comparing(Apple::getWeight).reversed());
        //按照重量降序排序,如果重量相同那就按照颜色的升序排序
        /*list.sort(Comparator.
                comparing(Apple::getWeight)
                .reversed()
                .thenComparing(Apple::getColor));*/
        //.thenCompareing(Comparator.comparing(Apple::getColor).reversed()));
        //list.removeIf(item -> item.getWeight() == 90);
        //删除颜色不是红颜色的苹果 Predicate的复合即谓词复合
        Predicate<Apple> redApple = item -> item.getColor().equals("red");
        //list.removeIf(redApple.negate());
        //去除红颜色并且重量大于150的苹果
        list.removeIf(redApple.and(item -> item.getWeight() > 150));
        //去除红色并且重量大于150的苹果或绿苹果
        list.removeIf(redApple.and(item -> item.getWeight() > 150).or(item -> item.getColor().equals("green")));
        list.forEach(System.out::println);
    }
}

二、方法引用

1、本质:就是Lambda表达式,对Lambda表达式的简写

2、比如类名::方法名,一般带两个冒号的就是

 什么情况下Lambda表达式可以改成方法引用?

1)Lambda表达式的方法体只有一行代码,并且只调用了一个方法

2)除了参数列表和1)中的"一个方法",没有再引入其他的额外的内容

三、Stream_中间操作

3.1、filter 过滤符合条件的

package day34;

import java.util.ArrayList;

public class MyTest04 {
    public static void main(String[] args) {
        //filter -- 中间操作
        ArrayList<String> list = new ArrayList<>();
        list.add("Aqaa");
        list.add("Bssss");
        list.add("Cwww");
        list.add("Ddsdd");
        list.add("Edadc");

        //在控制台打印长度大于2的字符串
        list.stream()
                .filter(item -> item.length() > 2) //--> Stream
                .forEach(System.out::println);
        System.out.println("--------------------------------");


        System.out.println(list);
    }
}

3.2、distinct 去重

import java.util.ArrayList;

public class MyTest04 {
    public static void main(String[] args) {
        //filter -- 中间操作
        ArrayList<String> list = new ArrayList<>();
        list.add("Aqaa");
        list.add("Aqaa");
        list.add("Bssss");
        list.add("Cwww");
        list.add("Ddsdd");
        list.add("Edadc");

        //在控制台打印长度大于2的字符串
        /*list.stream()
                .filter(item -> item.length() > 2) //--> Stream
                .forEach(System.out::println);
        System.out.println("--------------------------------");
*/
        //去除重复
        list.stream()
                .distinct() //根据元素的equals和hashCode方法判断是否重复
                .forEach(System.out::println);
        System.out.println("--------------------------------");

        ArrayList<Apple> list1 = new ArrayList<>();

        list1.add(new Apple(150,"red"));
        list1.add(new Apple(210,"red"));
        list1.add(new Apple(300,"yellow"));
        list1.add(new Apple(90,"green"));
        list1.add(new Apple(90,"yellow"));
        list1.add(new Apple(90,"yellow"));
        list1.add(new Apple(100,"green"));
        list1.add(new Apple(123,"red"));
        
        list1.stream()
                .distinct()
                .forEach(System.out::println);

        
    }
}

3.3、limit 截断流 使其元素不超过给定数量

System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        list1.stream()
                .limit(3)
                .forEach(System.out::println);

3.4、skip 跳过元素,返回一个扔掉了前n个元素的流,若元素不足n个,返回空流

 list1.stream()
      .skip(3)
      .forEach(System.out::println);

3.5、map 映射 将流中的每个元素进行转换

3.5.1、传统做法

package day34;

import java.util.ArrayList;
import java.util.LinkedHashSet;

public class MyTest05 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Aqaa");
        list.add("Aqaa");
        list.add("Bssss");
        list.add("Cwww");
        list.add("Ddsdd");
        list.add("Edadc");

        //map - 映射 - 将流中的每个元素进行转换
        //获取list中每个字符串的长度并在控制台打印
        list.stream()//String
                .map(s -> s.length())//长度
                .forEach(System.out::println);
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        //获取list中每个字符串的长度并在控制台打印,去除重复的长度
        list.stream()
                .map(String::length)
                .distinct()
                .forEach(System.out::println);
        System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
        //传统做法
        LinkedHashSet<Integer> setLength = new LinkedHashSet<>();
        for (String s : list) {
            setLength.add(s.length());
        }
        for (Integer len : setLength) {
            System.out.println(len);
        }
    }
}

3.5.2、flatMap 把多个流合并成一个流

System.out.println("__________________________________________");

        list.stream()
                .mapToInt(String::length)
                .distinct()
                .forEach(System.out::println);

        ArrayList<String> list1 = new ArrayList<>();
        list1.add("Hello");
        list1.add("World"); //H e l l o W o r l d

        list1.stream() //String
                .map(s -> s.split("")) //String --> String[]
                .flatMap(arr -> Arrays.stream(arr)) //String[] --> Stream -->Stream合并
                .forEach(System.out::println);
        /* 传统的 上面的是新的
        String[] arr = "hahaha".split("");
        System.out.println(Arrays.toString(arr));*/

四、Stream_终端操作

补forEach:没有返回值

4.1、allMatch_anyMatch_noneMatch

package day34;

import java.util.ArrayList;


public class MyTest06 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Aqaa");
        //list.add("Aqaa");
        list.add("Bssss");
        list.add("Cwww");
        list.add("Ddsdd");
        list.add("Edadc");

        boolean flag = list.stream()
                .allMatch(s -> s.length() > 2); //判断所有元素是否达到要求
        System.out.println(flag);

        boolean flag1 = list.stream()
                .anyMatch(s -> s.length() > 2); //判断是否有元素是否达到要求
        System.out.println(flag1);

        boolean flag2 = list.stream()
                .noneMatch(s -> s.length() > 2); //判断没有任何元素达到要求
        System.out.println(flag2);
    }
}

4.2、findFirst_findAny

package day34;

import java.util.ArrayList;
import java.util.Optional;

public class MyTest06 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Aqaa");
        //list.add("Aqaa");
        list.add("Bssss");
        list.add("Cwww");
        list.add("Ddsdd");
        list.add("Edadc");

        boolean flag = list.stream()
                .allMatch(s -> s.length() > 2); //判断所有元素是否达到要求
        System.out.println(flag);

        boolean flag1 = list.stream()
                .anyMatch(s -> s.length() > 2); //判断是否有元素是否达到要求
        System.out.println(flag1);

        boolean flag2 = list.stream()
                .noneMatch(s -> s.length() > 2); //判断没有任何元素达到要求
        System.out.println(flag2);

        Optional<String> first = list.stream().findFirst(); //获取第一个元素
        System.out.println(first.get());

        Optional<String> any = list.stream().findAny(); //获取任意一个元素
        System.out.println(any.get());
    }
}

4.3、reduce

!!!!!归约!!!!!

之前见到过的终端操作都是返回一个boolean(allMatch之类的)、void(forEach)或Optional对象(findAny)等。使用reduce操作来表达更复杂的查询,此类查询需要将流中所有元素反复结合起来,得到一个值,比如一个Integer.这样的查询可以被归类为归约操作(将流归约成一个值)

package day34;

import java.util.Arrays;
import java.util.Optional;

public class MyTest07 {
    public static void main(String[] args) {
        Integer[] arr = new Integer[]{1,2,3};
        /*Integer sum = Arrays.stream(arr)
                .reduce(0, (n1, n2) -> n1 + n2);*/

        /*Integer sum = Arrays.stream(arr)
                .reduce(0, (n1, n2) -> Integer.sum(n1, n2));*/

        Integer sum = Arrays.stream(arr)
                .reduce(0, Integer::sum);
        System.out.println(sum);
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        Optional<Integer> sum1 = Arrays.stream(arr)
                .reduce(Integer::sum);
        System.out.println(sum1.get());
        
        //最大值
        /*Integer max = Arrays.stream(arr)
                .reduce(arr[0], (n1, n2) -> {
                    if (n1 > n2) {
                        return n1;
                    } else {
                        return n2;
                    }
                });*/
       /* Integer max = Arrays.stream(arr)
                .reduce(arr[0], (n1, n2) -> n1 > n2 ? n1 : n2);*/
        /*Integer max = Arrays.stream(arr)
                .reduce(arr[0], (n1, n2) -> Integer.max(n1, n2));*/
        Integer max = Arrays.stream(arr)
                .reduce(arr[0], Integer::max);
        System.out.println("Max = " + max);

        Optional<Integer> max1 = Arrays.stream(arr)
                .reduce(Integer::max);//没有起始值的
        System.out.println("Max1 = " + max1.get());
        
        //最小值
        Integer min = Arrays.stream(arr)
                .reduce(arr[0], Integer::min);
        System.out.println("Min = " + min);
        
        //最佳实践:包装类判断值是否相同要使用equals判断
        Integer i1 = 1000;
        Integer i2 = 1000;
        System.out.println(i1 == i2);//不行
        System.out.println(i1.equals(i2));
    }
}

 小练习:

怎样用map 和 reduce 方法计算流中元素的数据。

 //计算流中的元素个数
        //把元素值都变成1,累加起来即为sum
        Integer count = Arrays.stream(arr)
                .map(item -> 1)
                .reduce(0, Integer::sum);
        System.out.println(count);

4.4、sorted

package day34;

import java.util.ArrayList;
import java.util.Comparator;

public class MyTest08 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Aqaa");
        //list.add("Aqaa");
        list.add("Bssss");
        list.add("Cwww");
        list.add("Ddsdd");
        list.add("Edadc");
        
        list.stream()
                .sorted() //自然排序
                .forEach(System.out::println);
        System.out.println("==============================================");
        
        /*list.stream()
                .sorted((s1, s2) -> Integer.compare(s1.length(), s2.length()))
                .forEach(System.out::println);*/
        list.stream()
                .sorted(Comparator.comparingInt(String::length).reversed().thenComparing(String::compareTo))
                .forEach(System.out::println);

        System.out.println("-----------------------------------------------");
        System.out.println(list.stream().count());

    }
}

4.5、Stream的终止操作

终端操作会从流的流水线生成结果。其结果可以是任何不是流的值。例如:List、Integer,甚至是void。

流进行了终止操作后,不能再次使用。

package day35;

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

public class MyTest01 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Aqaa");
        list.add("Bssss");
        list.add("Cwww");
        list.add("Ddsdd");
        list.add("Edadc");

        Stream<String> stream = list.stream();
        stream.map(item -> 1).forEach(System.out::println);
        //流一旦进行了终端操作就不能再重复使用,报错
        stream.map(item -> 1).forEach(System.out::println);
    }
}

4.5.1、匹配与查找

package day35;

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

public class MyTest01 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Aqaa");
        list.add("Bssss");
        list.add("Cwww");
        list.add("Ddsdd");
        list.add("Edadc");

        System.out.println(list.stream().count());

        Optional<String> max = list.stream()
                //.max((s1, s2) -> s1.compareTo(s2));
                .max(String::compareTo);
        System.out.println(max.get());
    }
}

4.6、collect

package day35;

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

public class MyTest02 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Aqaa");
        list.add("Bssss");
        list.add("Cwww");
        list.add("Ddsdd");
        list.add("Edadc");

        /*ArrayList<Integer> nums = new ArrayList<>();
        list.stream()
                .map(String::length)
                .forEach(len -> nums.add(len));
        System.out.println(nums);*/

        List<Integer> nums = list.stream()
                .map(String::length)
                .collect(Collectors.toList());//把流当中的元素给搜集到集合里面,并作为元素返回
        Set<Integer> nums1 = list.stream()
                .map(String::length)
                .collect(Collectors.toSet());//Set方法自动去重,Collectors可省略

        TreeSet<Integer> num2 = new TreeSet<>(nums1);//合并转换
        System.out.println(num2);

        System.out.println(nums1);
        System.out.println("------------------------------------------------");
        String s = list.stream()
                .map(str -> str.substring(0, 1))
                .collect(Collectors.joining("+"));
        System.out.println(s);

        //例子:搜集所有参与交易的交易员姓名到一个集合中
        /*List<String> names = transactions.stream()
                .map(Transaction::getTrader)
                .map(Trader::getName)
                .distinct
                .collect(Collectors.toList());
        System.out.println(names);*/

    }
}

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

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

相关文章

分布式流处理与消息传递——Kafka ISR(In-Sync Replicas)算法深度解析

Java Kafka ISR&#xff08;In-Sync Replicas&#xff09;算法深度解析 一、ISR核心原理 #mermaid-svg-OQtnaUGNQ9PMgbW0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OQtnaUGNQ9PMgbW0 .error-icon{fill:#55222…

OS10.【Linux】yum命令

目录 1.安装软件的几种方法 直接编译源代码,得到可执行程序 使用软件包管理器 2.yum yum list命令 参数解释 yum install命令 yum remove命令 下载链接存放的位置 扩展yum源 实验:安装sl小火车命令 sl命令的选项 方法1:man sl 方法2:读源代码 3.更新yum源 查看…

多模态大语言模型arxiv论文略读(102)

Chat2Layout: Interactive 3D Furniture Layout with a Multimodal LLM ➡️ 论文标题&#xff1a;Chat2Layout: Interactive 3D Furniture Layout with a Multimodal LLM ➡️ 论文作者&#xff1a;Can Wang, Hongliang Zhong, Menglei Chai, Mingming He, Dongdong Chen, Ji…

高端装备制造企业如何选择适配的项目管理系统提升项目执行效率?附选型案例

高端装备制造项目通常涉及多专业协同、长周期交付和高风险管控&#xff0c;因此系统需具备全生命周期管理能力。例如&#xff0c;北京奥博思公司出品的 PowerProject 项目管理系统就是一款非常适合制造企业使用的项目管理软件系统。 国内某大型半导体装备制造企业与奥博思软件达…

AI炼丹日志-22 - MCP 自动操作 Figma+Cursor 自动设计原型

MCP 基本介绍 官方地址&#xff1a; https://modelcontextprotocol.io/introduction “MCP 是一种开放协议&#xff0c;旨在标准化应用程序向大型语言模型&#xff08;LLM&#xff09;提供上下文的方式。可以把 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种…

[嵌入式实验]实验四:串口打印电压及温度

一、实验目的 熟悉开发环境在开发板上读取电压和温度信息使用串口和PC通信在PC上输出当前电压和温度信息 二、实验环境 硬件&#xff1a;STM32开发板、CMSIS-DAP调试工具 软件&#xff1a;STM32CubeMX软件、ARM的IDE&#xff1a;Keil C51 三、实验内容 配置相关硬件设施 &…

Linux正则三剑客篇

一、历史命令 history 命令 &#xff1a;用于输出历史上使用过的命令行数量及具体命令。通过 history 可以快速查看并回顾之前执行过的命令&#xff0c;方便重复操作或追溯执行过程。 !行号 &#xff1a;通过指定历史命令的行号来重新执行该行号对应的命令。例如&#xff0c;若…

【计算机网络】第3章:传输层—可靠数据传输的原理

目录 一、PPT 二、总结 &#xff08;一&#xff09;可靠数据传输原理 关键机制 1. 序号机制 (Sequence Numbers) 2. 确认机制 (Acknowledgements - ACKs) 3. 重传机制 (Retransmission) 4. 校验和 (Checksum) 5. 流量控制 (Flow Control) 协议实现的核心&#xff1a;滑…

OpenCV CUDA模块直方图计算------在 GPU上执行直方图均衡化(Histogram Equalization)函数equalizeHist

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::equalizeHist 用于增强图像的对比度&#xff0c;通过将图像的灰度直方图重新分布&#xff0c;使得图像整体对比度更加明显。 这在医学…

构建系统maven

1 前言 说真的&#xff0c;我是真的不想看构建了&#xff0c;因为真的太多了。又多又乱。Maven、Gradle、Make、CMake、Meson、Ninja&#xff0c;Android BP。。。感觉学不完&#xff0c;根本学不完。。。 但是没办法最近又要用一下Maven&#xff0c;所以咬着牙再简单整理一下…

day13 leetcode-hot100-23(链表2)

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 1.迭代 思路 这个题目很简单&#xff0c;最主要的就是了解链表的数据结构。 链表由多个节点构成&#xff0c;每个节点包括值与指针&#xff0c;其中指针指向下一个节点&#xff08;单链表&#xff09;。 方法就是将指…

代谢组数据分析(二十五):代谢组与蛋白质组数据分析的异同

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍蛋白质组定义与基因的关系蛋白质组学(Proteomics)检测技术蛋白质的鉴定与定量分析蛋白质“鉴定”怎么做蛋白质“定量”怎么做蛋白质鉴定与定量对比应用领域代谢组定义代谢组学(M…

002 flutter基础 初始文件讲解(1)

在学习flutter的时候&#xff0c;要有“万物皆widget”的思想&#xff0c;这样有利于你的学习&#xff0c;话不多说&#xff0c;开始今天的学习 1.创建文件 进入trae后&#xff0c;按住ctrlshiftP&#xff0c;输入Flutter&#xff1a;New Project&#xff0c;回车&#xff0c…

Launcher3体系化之路

&#x1f44b; 欢迎来到Launcher 3 背景 车企对于桌面的排版布局好像没有手机那般复杂&#xff0c;但也有一定的需求。部分场景下&#xff0c;要考虑的上下文比手机要多一些&#xff0c;比如有如下的一些场景&#xff1a; 手车互联。HiCar&#xff0c;CarPlay&#xff0c;An…

用wireshark抓了个TCP通讯的包

昨儿个整理了下怎么用wireshark抓包&#xff0c;链接在这里&#xff1a;捋捋wireshark 今天打算抓个TCP通讯的包试试&#xff0c;整体来说比较有收获&#xff0c;给大家汇报一下。 首先就是如何搞到可以用来演示TCP通讯的客户端、服务端&#xff0c;问了下deepseek&#xff0c;…

VR/AR 显示瓶颈将破!铁电液晶技术迎来关键突破

在 VR/AR 设备逐渐走进大众生活的今天&#xff0c;显示效果却始终是制约其发展的一大痛点。纱窗效应、画面拖影、眩晕感…… 传统液晶技术的瓶颈让用户体验大打折扣。不过&#xff0c;随着铁电液晶技术的重大突破&#xff0c;这一局面有望得到彻底改变。 一、传统液晶技术瓶颈…

Python使用

Python学习&#xff0c;从安装&#xff0c;到简单应用 前言 Python作为胶水语言在web开发&#xff0c;数据分析&#xff0c;网络爬虫等方向有着广泛的应用 一、Python入门 相关基础语法直接使用相关测试代码 Python编译器版本使用3以后&#xff0c;安装参考其他教程&#xf…

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类 目录 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类分类效果功能概述程序设计参考资料 分类效果 功能概述 代码功能 该MATLAB代码实现了一个结合CNN、LSTM和注意力机制的高光谱数据分类模型&#xff0c;核心…

【解决方案-RAGFlow】RAGFlow显示Task is queued、 Microsoft Visual C++ 14.0 or greater is required.

目录 一、长时间显示&#xff1a;Task is queued 二、GraphRAG消耗大量Token 三、error: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools“ 四、ModuleNotFoundError: No module named infinity.common; infinity is not a package 五…

爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力

前言 电商数据分析在现代商业中具有重要的战略价值&#xff0c;通过对消费者行为、销售趋势、商品价格、库存等数据的深入分析&#xff0c;企业能够获得对市场动态的精准洞察&#xff0c;优化运营决策&#xff0c;预测市场趋势、优化广告投放、提升供应链效率&#xff0c;并通…