StreamUtils 流处理工具

news2025/1/11 14:15:59

一、工具类展示

提供对集合的过滤、拼接、排序、MAP转化、分组、转为SET集合等方法


/**
 * stream 流工具类
 *
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class StreamUtils {

    /**
     * 将collection过滤
     *
     * @param collection 需要转化的集合
     * @param function   过滤方法
     * @return 过滤后的list
     */
    public static <E> List<E> filter(Collection<E> collection, Predicate<E> function) {
        if (CollUtil.isEmpty(collection)) {
            return CollUtil.newArrayList();
        }
        return collection.stream().filter(function).collect(Collectors.toList());
    }

    /**
     * 将collection拼接
     *
     * @param collection 需要转化的集合
     * @param function   拼接方法
     * @return 拼接后的list
     */
    public static <E> String join(Collection<E> collection, Function<E, String> function) {
        return join(collection, function, StringUtils.SEPARATOR);
    }

    /**
     * 将collection拼接
     *
     * @param collection 需要转化的集合
     * @param function   拼接方法
     * @param delimiter  拼接符
     * @return 拼接后的list
     */
    public static <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) {
        if (CollUtil.isEmpty(collection)) {
            return StringUtils.EMPTY;
        }
        return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter));
    }

    /**
     * 将collection排序
     *
     * @param collection 需要转化的集合
     * @param comparing  排序方法
     * @return 排序后的list
     */
    public static <E> List<E> sorted(Collection<E> collection, Comparator<E> comparing) {
        if (CollUtil.isEmpty(collection)) {
            return CollUtil.newArrayList();
        }
        return collection.stream().filter(Objects::nonNull).sorted(comparing).collect(Collectors.toList());
    }

    /**
     * 将collection转化为类型不变的map<br>
     * <B>{@code Collection<V>  ---->  Map<K,V>}</B>
     *
     * @param collection 需要转化的集合
     * @param key        V类型转化为K类型的lambda方法
     * @param <V>        collection中的泛型
     * @param <K>        map中的key类型
     * @return 转化后的map
     */
    public static <V, K> Map<K, V> toIdentityMap(Collection<V> collection, Function<V, K> key) {
        if (CollUtil.isEmpty(collection)) {
            return MapUtil.newHashMap();
        }
        return collection.stream().filter(Objects::nonNull).collect(Collectors.toMap(key, Function.identity(), (l, r) -> l));
    }

    /**
     * 将Collection转化为map(value类型与collection的泛型不同)<br>
     * <B>{@code Collection<E> -----> Map<K,V>  }</B>
     *
     * @param collection 需要转化的集合
     * @param key        E类型转化为K类型的lambda方法
     * @param value      E类型转化为V类型的lambda方法
     * @param <E>        collection中的泛型
     * @param <K>        map中的key类型
     * @param <V>        map中的value类型
     * @return 转化后的map
     */
    public static <E, K, V> Map<K, V> toMap(Collection<E> collection, Function<E, K> key, Function<E, V> value) {
        if (CollUtil.isEmpty(collection)) {
            return MapUtil.newHashMap();
        }
        return collection.stream().filter(Objects::nonNull).collect(Collectors.toMap(key, value, (l, r) -> l));
    }

    /**
     * 将collection按照规则(比如有相同的班级id)分类成map<br>
     * <B>{@code Collection<E> -------> Map<K,List<E>> } </B>
     *
     * @param collection 需要分类的集合
     * @param key        分类的规则
     * @param <E>        collection中的泛型
     * @param <K>        map中的key类型
     * @return 分类后的map
     */
    public static <E, K> Map<K, List<E>> groupByKey(Collection<E> collection, Function<E, K> key) {
        if (CollUtil.isEmpty(collection)) {
            return MapUtil.newHashMap();
        }
        return collection
            .stream().filter(Objects::nonNull)
            .collect(Collectors.groupingBy(key, LinkedHashMap::new, Collectors.toList()));
    }

    /**
     * 将collection按照两个规则(比如有相同的年级id,班级id)分类成双层map<br>
     * <B>{@code Collection<E>  --->  Map<T,Map<U,List<E>>> } </B>
     *
     * @param collection 需要分类的集合
     * @param key1       第一个分类的规则
     * @param key2       第二个分类的规则
     * @param <E>        集合元素类型
     * @param <K>        第一个map中的key类型
     * @param <U>        第二个map中的key类型
     * @return 分类后的map
     */
    public static <E, K, U> Map<K, Map<U, List<E>>> groupBy2Key(Collection<E> collection, Function<E, K> key1, Function<E, U> key2) {
        if (CollUtil.isEmpty(collection)) {
            return MapUtil.newHashMap();
        }
        return collection
            .stream().filter(Objects::nonNull)
            .collect(Collectors.groupingBy(key1, LinkedHashMap::new, Collectors.groupingBy(key2, LinkedHashMap::new, Collectors.toList())));
    }

    /**
     * 将collection按照两个规则(比如有相同的年级id,班级id)分类成双层map<br>
     * <B>{@code Collection<E>  --->  Map<T,Map<U,E>> } </B>
     *
     * @param collection 需要分类的集合
     * @param key1       第一个分类的规则
     * @param key2       第二个分类的规则
     * @param <T>        第一个map中的key类型
     * @param <U>        第二个map中的key类型
     * @param <E>        collection中的泛型
     * @return 分类后的map
     */
    public static <E, T, U> Map<T, Map<U, E>> group2Map(Collection<E> collection, Function<E, T> key1, Function<E, U> key2) {
        if (CollUtil.isEmpty(collection) || key1 == null || key2 == null) {
            return MapUtil.newHashMap();
        }
        return collection
            .stream().filter(Objects::nonNull)
            .collect(Collectors.groupingBy(key1, LinkedHashMap::new, Collectors.toMap(key2, Function.identity(), (l, r) -> l)));
    }

    /**
     * 将collection转化为List集合,但是两者的泛型不同<br>
     * <B>{@code Collection<E>  ------>  List<T> } </B>
     *
     * @param collection 需要转化的集合
     * @param function   collection中的泛型转化为list泛型的lambda表达式
     * @param <E>        collection中的泛型
     * @param <T>        List中的泛型
     * @return 转化后的list
     */
    public static <E, T> List<T> toList(Collection<E> collection, Function<E, T> function) {
        if (CollUtil.isEmpty(collection)) {
            return CollUtil.newArrayList();
        }
        return collection
            .stream()
            .map(function)
            .filter(Objects::nonNull)
            .collect(Collectors.toList());
    }

    /**
     * 将collection转化为Set集合,但是两者的泛型不同<br>
     * <B>{@code Collection<E>  ------>  Set<T> } </B>
     *
     * @param collection 需要转化的集合
     * @param function   collection中的泛型转化为set泛型的lambda表达式
     * @param <E>        collection中的泛型
     * @param <T>        Set中的泛型
     * @return 转化后的Set
     */
    public static <E, T> Set<T> toSet(Collection<E> collection, Function<E, T> function) {
        if (CollUtil.isEmpty(collection) || function == null) {
            return CollUtil.newHashSet();
        }
        return collection
            .stream()
            .map(function)
            .filter(Objects::nonNull)
            .collect(Collectors.toSet());
    }


    /**
     * 合并两个相同key类型的map
     *
     * @param map1  第一个需要合并的 map
     * @param map2  第二个需要合并的 map
     * @param merge 合并的lambda,将key  value1 value2合并成最终的类型,注意value可能为空的情况
     * @param <K>   map中的key类型
     * @param <X>   第一个 map的value类型
     * @param <Y>   第二个 map的value类型
     * @param <V>   最终map的value类型
     * @return 合并后的map
     */
    public static <K, X, Y, V> Map<K, V> merge(Map<K, X> map1, Map<K, Y> map2, BiFunction<X, Y, V> merge) {
        if (MapUtil.isEmpty(map1) && MapUtil.isEmpty(map2)) {
            return MapUtil.newHashMap();
        } else if (MapUtil.isEmpty(map1)) {
            map1 = MapUtil.newHashMap();
        } else if (MapUtil.isEmpty(map2)) {
            map2 = MapUtil.newHashMap();
        }
        Set<K> key = new HashSet<>();
        key.addAll(map1.keySet());
        key.addAll(map2.keySet());
        Map<K, V> map = new HashMap<>();
        for (K t : key) {
            X x = map1.get(t);
            Y y = map2.get(t);
            V z = merge.apply(x, y);
            if (z != null) {
                map.put(t, z);
            }
        }
        return map;
    }

}

准备数据如下:

 public static List<TestDemo> getList() {
        List<TestDemo> list = new ArrayList<>();
        TestDemo demo1 = new TestDemo();
        demo1.setTestKey("1");
        demo1.setOrderNum(1);
        list.add(demo1);

        TestDemo demo2 = new TestDemo();
        demo2.setTestKey("2");
        demo2.setOrderNum(2);
        list.add(demo2);

        TestDemo demo3 = new TestDemo();
        demo3.setTestKey("3");
        demo3.setOrderNum(5);

        TestDemo demo4 = new TestDemo();
        demo4.setTestKey("1");
        demo4.setOrderNum(4);

        list.add(demo1);
        list.add(demo2);
        list.add(demo3);
        list.add(demo4);
        return list;
    }

二、过滤

过滤:testKey 等于1的数据

 static void testFilter() {
        List<TestDemo> list = getList();
        List<TestDemo> filter = StreamUtils.filter(list, demo -> "1".equals(demo.getTestKey()));
        for (TestDemo demo : filter){
            Console.log("demo->{}", demo);
        }
    }

 过滤结果:testKey 等于1的数据

demo->TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null)
demo->TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null)
demo->TestDemo(id=null, deptId=null, userId=null, orderNum=4, testKey=1, value=null, version=null, delFlag=null)

 二、拼接

逗号拼接; 不传入连接符默认是逗号拼接

 static void testJoin() {
        List<TestDemo> list = getList();
        String join = StreamUtils.join(list, demo -> demo.getTestKey(), "--");
            Console.log("join->{}",  join);
        }

拼接结果:

join->1--2--1--2--3--1

三、 排序

传入Comparator ,对比 return o1.getOrderNum() - o2.getOrderNum() :

  • o1 = 02 :  返回等于0 
  • o1 > 02 :  返回大于0 
  • o1 < 02 :  返回小于0 

 static void testSort() {
        List<TestDemo> list = getList();
        List<TestDemo> sorted = StreamUtils.sorted(list, new Comparator<TestDemo>() {
            @Override
            public int compare(TestDemo o1, TestDemo o2) {
                return o1.getOrderNum() - o2.getOrderNum();
            }
        });
        for (TestDemo demo : sorted) {
            Console.log("sorted->{}", demo);
        }
    }

 上面简写:

 static void testSort() {
        List<TestDemo> list = getList();
        List<TestDemo> sorted = StreamUtils.sorted(list, (o1, o2) -> o1.getOrderNum() - o2.getOrderNum());
        for (TestDemo demo : sorted) {
            Console.log("sorted->{}", demo);
        }
    }

 如图看orderNum 的排序:

sorted->TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null)
sorted->TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null)
sorted->TestDemo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, version=null, delFlag=null)
sorted->TestDemo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, version=null, delFlag=null)
sorted->TestDemo(id=null, deptId=null, userId=null, orderNum=4, testKey=1, value=null, version=null, delFlag=null)
sorted->TestDemo(id=null, deptId=null, userId=null, orderNum=5, testKey=3, value=null, version=null, delFlag=null)

四、转换MAP

testKey作为MAP集合的key

static void  testToIdentityMap(){
        List<TestDemo> list = getList();
        Map<String, TestDemo> map = StreamUtils.toIdentityMap(list, demo -> demo.getTestKey());
        //Map<String, TestDemo> map1 = StreamUtils.toIdentityMap(list, demo -> demo.getOrderNum().toString());
        for (String key : map.keySet()) {
            Console.log("testToIdentityMap->{}->{}", key, map.get(key));
        }
    }

打印结果:

testToIdentityMap->1->TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null)
testToIdentityMap->2->TestDemo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, version=null, delFlag=null)
testToIdentityMap->3->TestDemo(id=null, deptId=null, userId=null, orderNum=5, testKey=3, value=null, version=null, delFlag=null)

五、转换MAP,重新定义返回Value

  • String作为key
  • 并将 value值,由 TestDemo转换为了TestDemoVo对象
 static void  toMap(){
        List<TestDemo> list = getList();
        Map<String, Object> map = StreamUtils.toMap(list, new Function<TestDemo, String>() {
                @Override
                public String apply(TestDemo testDemo) {
                    return testDemo.getOrderNum().toString();
                }
            },
            new Function<TestDemo, Object>() {
                @Override
                public Object apply(TestDemo testDemo) {
                    TestDemoVo copy = BeanCopyUtils.copy(testDemo, TestDemoVo.class);
                    return copy;
                }
            }
        );

        for (Object key : map.keySet()) {
            Console.log("toMap->{}->{}", key, map.get(key));
        }
    }

打印结果:

value由   TestDemo转换为了TestDemoVo.class

toMap->1->TestDemoVo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null)
toMap->2->TestDemoVo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null)
toMap->4->TestDemoVo(id=null, deptId=null, userId=null, orderNum=4, testKey=1, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null)
toMap->5->TestDemoVo(id=null, deptId=null, userId=null, orderNum=5, testKey=3, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null)

六、分组

1-根据testKey分组

 static void  testGroup(){
        List<TestDemo> list = getList();
        Map<String, List<TestDemo>> map = StreamUtils.groupByKey(list, demo -> demo.getTestKey());
        for (String key : map.keySet()) {
            Console.log("testGroup->{}->{}", key, map.get(key));
        }
    }

返回结果:

testGroup->1->[TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null), TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null), TestDemo(id=null, deptId=null, userId=null, orderNum=4, testKey=1, value=null, version=null, delFlag=null)]
testGroup->2->[TestDemo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, version=null, delFlag=null), TestDemo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, version=null, delFlag=null)]
testGroup->3->[TestDemo(id=null, deptId=null, userId=null, orderNum=5, testKey=3, value=null, version=null, delFlag=null)]

2- 根据2个条件分组:外层根据testKey ,内层根据:orderNum

    static void  testGroup2(){
        List<TestDemo> list = getList();
        Map<String, Map<Integer, List<TestDemo>>> stringMapMap = StreamUtils.groupBy2Key(list, demo -> demo.getTestKey(), demo -> demo.getOrderNum());
        for (String keyout : stringMapMap.keySet()) {
            Map<Integer, List<TestDemo>> integerListMap = stringMapMap.get(keyout);
            Console.log("外层->{}->{}", keyout, stringMapMap.get(keyout));
            for (Integer keyin : integerListMap.keySet()) {
                Console.log("内层->{}->{}", keyin, integerListMap.get(keyin));
            }
        }
    }

结果:

外层->1->{1=[TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null), TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null)], 4=[TestDemo(id=null, deptId=null, userId=null, orderNum=4, testKey=1, value=null, version=null, delFlag=null)]}
内层->1->[TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null), TestDemo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, version=null, delFlag=null)]
内层->4->[TestDemo(id=null, deptId=null, userId=null, orderNum=4, testKey=1, value=null, version=null, delFlag=null)]
外层->2->{2=[TestDemo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, version=null, delFlag=null), TestDemo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, version=null, delFlag=null)]}
内层->2->[TestDemo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, version=null, delFlag=null), TestDemo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, version=null, delFlag=null)]
外层->3->{5=[TestDemo(id=null, deptId=null, userId=null, orderNum=5, testKey=3, value=null, version=null, delFlag=null)]}
内层->5->[TestDemo(id=null, deptId=null, userId=null, orderNum=5, testKey=3, value=null, version=null, delFlag=null)]

七、将collection转化为List集合,但是两者的泛型不同

static void  testToList(){
        List<TestDemo> list = getList();
        //返回单个属性集合
        List<String> strings = StreamUtils.toList(list, demo -> demo.getTestKey());
        Console.log("testToList->{}", strings);

        //转换为vo类
        List<TestDemoVo> testDemoVos = StreamUtils.toList(list, demo -> {
            TestDemoVo copy = BeanCopyUtils.copy(demo, TestDemoVo.class);
            return copy;
        });
        Console.log("testToList->{}", testDemoVos);
    }

返回结果:

testToList->[1, 2, 1, 2, 3, 1]
testToList->[TestDemoVo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null), TestDemoVo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null), TestDemoVo(id=null, deptId=null, userId=null, orderNum=1, testKey=1, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null), TestDemoVo(id=null, deptId=null, userId=null, orderNum=2, testKey=2, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null), TestDemoVo(id=null, deptId=null, userId=null, orderNum=5, testKey=3, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null), TestDemoVo(id=null, deptId=null, userId=null, orderNum=4, testKey=1, value=null, createTime=null, createBy=null, updateTime=null, updateBy=null)]

八、转换set集合去掉重复

   //转换为set (去掉重复数据)
    static void  testToSet(){
        List<TestDemo> list = getList();
        Set<String> strings = StreamUtils.toSet(list, demo -> demo.getTestKey());
        Console.log("testToSet->{}", strings);
    }

结果:

testToSet->[1, 2, 3]

九、合并

合并两个相同key类型的map
  static void  testMerge(){
        List<TestDemo> list = getList();
        //先得到2个,key同类型,value 类型不一样的 map
        Map<String, String> map1 = StreamUtils.toMap(list, demo -> demo.getTestKey(), demo -> demo.getTestKey());
        Map<String, Integer> map2 = StreamUtils.toMap(list, demo -> demo.getOrderNum()+"",demo->demo.getOrderNum());

        //合并
        Map<String, String> merge = StreamUtils.merge(map1, map2, (value1, value2) -> value1 + "--" + value2);
        Console.log("testMerge->{}", merge);
    }

结果:

相同的key合并,value 用符号--拼接

testMerge->{1=1--1, 2=2--2, 3=3--null, 4=null--4, 5=null--5}

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

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

相关文章

【Linux Install】Ubuntu20, Windows10 双系统安装

1. 制作启动盘 1.1 下载 Ubuntu 系统镜像 ISO 文件 从 Ubuntu 官网下载 (https://cn.ubuntu.com/download/desktop)。官网访问慢的&#xff0c;从国内镜像点下。 1.2 烧录 Ubuntu ISO 镜像 下载 Rufus&#xff1a;从Rufus官网下载 Rufus 工具。 插入U 盘&#xff1a;将U盘插…

mysql-增添轮播图

使用工具Navicat连接mysql: 首先 然后 需要注意的是需要上面两个步骤执行之后,再点击连接测试才可以成功,其他单独连接测试都不成功,然后点击确定即可!!!!! MySQL修改: 首先,进入mysql mysql -u root -p 密码忘记参考教程:Linux错误 ERROR 1045 (28000): Acce…

数据结构入门——07堆

1.堆 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树数据结构&#xff0c;具有以下两个主要特性&#xff1a; 结构特性&#xff1a; 堆是一棵完全二叉树&#xff0c;即除了最后一层的叶子节点外&#xff0c;每一层都是满的&#xff0c;最后一层的叶子节点从左向右依次…

西安国际数字影像产业园作为一个数字创意孵化园的实际情况怎么样?

在科技飞速发展的今天&#xff0c;数字创意产业正迅速崛起&#xff0c;成为全球经济的新增长点。西安国际数字影像产业园作为中国西部数字创意产业的领军者&#xff0c;凭借其独特的优势和发展策略&#xff0c;迅速崭露头角&#xff0c;成为全国瞩目的焦点。那么&#xff0c;是…

前端统计SDK设计和实现

前端统计的范围 访问量 PV自定义事件性能&#xff0c;错误 前端统计的实现 发送统计数据 不用 axios ( 因为统计服务器通常由第三方提供&#xff0c;需要跨域 )&#xff0c;而用 img 发送&#xff0c;因为可跨域&#xff0c;且兼容性非常好 自定义事件的统计 pv 的统计 性能…

【鸿蒙学习】HarmonyOS应用开发者基础 - 构建更加丰富的页面之Tabs(三)

学完时间&#xff1a;2024年8月14日 一、前言叨叨 学习HarmonyOS的第六课&#xff0c;人数又成功的降了500名左右&#xff0c;到了3575人了。 本文接上一文章【鸿蒙学习】HarmonyOS应用开发者基础 - 构建更加丰富的页面&#xff08;一&#xff09;&#xff0c;继续记录构建更…

探索数据结构:AVL树的分析与实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. AVL树的介绍 在前面我们学习二叉搜索树时知道&#xff0c;在数据有序…

鸿蒙开发APP应用UX体验标准

基础体验 应用导航 3.1.1.1 系统返回 页面布局 3.1.2.1 布局基础要求 3.1.2.2 挖孔区适配 人机交互 3.1.3.1 避免与系统手势冲突3.1.3.2 典型手势时长设计3.1.3.3 点击热区 视觉风格 3.1.4.1 色彩对比度3.1.4.2 字体大小 3.1.4.3 图标 3.1.4.3.1 应用图标3.1.4.3.2 界…

统一响应结果封装,Result类的实现【后端 06】

统一响应结果封装&#xff0c;Result类的实现 在开发Web应用或API接口时&#xff0c;如何优雅地处理并返回响应结果是每个开发者都需要考虑的问题。统一响应结果封装&#xff08;Unified Response Encapsulation&#xff09;作为一种广泛采用的实践&#xff0c;不仅提高了API的…

快讯 | OpenAI 找回场子:chatgpt-4o-latest 刷新多项AI跑分纪录

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

LeetCode 205 同构字符串

题目 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字符上&#xff0c…

边缘智能:让每一个温室都成为计算中心

&#xff08; 于景鑫 国家农业信息化工程技术研究中心&#xff09;当人工智能的浪潮席卷全球&#xff0c;大语言模型&#xff08;LLM&#xff09;引领智能风潮之时&#xff0c;"智慧农业"也摩拳擦掌跃跃欲试。设施农业作为现代农业的翘楚&#xff0c;正站在数智化变革…

C语言典型例题38

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题3.5 写程序&#xff0c;判断某一年是否为闰年 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题3.5 写程序&#xff0c;判断某一年是否为闰年//相关知识&#xff1a;如果…

观存储历史,论数据未来

数据存储 这几天我反复观看了腾讯云社区的《中国数据库前世今生》纪录片&#xff0c;每次的感受都大相径庭。以下是我在这段时间里对纪录片的两个不同感想&#xff0c;希望感兴趣的小伙伴们也能去观看一番。 一个是关于国产数据库的发展趋势的探讨&#xff1a;https://blog.c…

使用 C# 反射查询程序集的元数据 (LINQ)

文章目录 1. 反射概述2. LINQ 概述3. 使用反射和 LINQ 查询程序集的元数据4. 扩展&#xff1a;查询字段和属性5. 扩展示例&#xff1a;查询公共类及其属性和方法6. 总结 在 C# 中&#xff0c;反射是一个强大的工具&#xff0c;它允许我们在运行时检查程序集、类型、方法等的元数…

机器学习速成第二集——监督学习之回归(理论部分)!

目录 回归算法 线性回归与非线性回归在实际应用中的优缺点比较是什么&#xff1f; 线性回归的优缺点 非线性回归的优缺点 优点&#xff1a; 缺点&#xff1a; 多项式回归模型如何选择最佳的多项数以提高预测准确性&#xff1f; 岭回归和套索回归在防止过拟合方面的具体…

【屏驱MCU】实现文件路径的的挂载

说明&#xff1a;本文涉及到一些底层的 .py 编译脚本以及编辑原理&#xff0c;笔者也不是完全明白&#xff0c;本文的主要目的是介绍一下流程&#xff0c;供小白使用。 接上文&#xff1a;【屏驱MCU】RT-Thread 文件系统接口解析 屏驱MCU系列文章 【屏显MCU】多媒体接口总结&am…

【Python学习-UI界面】PyQt5 小部件6- QComboBox

样式如下: 一个 QComboBox 对象呈现一个下拉列表供选择。它在表单上占用的屏幕空间最小&#xff0c;仅显示当前选定项。 可以将组合框设置为可编辑&#xff1b;还可以存储像素映射对象。 常用方法如下&#xff1a; 序号方法描述1addItem将字符串添加到集合中2addItems在列…

第十一章、 Java常用类

第十一章、 Java常用类 11.1 包装类 11.1.1 包装类的分类 针对八种基本数据类型相应的引用类型-包装类有了类的特点&#xff0c;就可以调用类中的方法。 11.1.2 包装类和基本数据的转换 Jdk5前的手动装箱和拆箱方式&#xff0c;装箱&#xff1a;基本类型->包装类型&am…

Mysql——对数据基本操作(增删查改)——操纵语言(DML)

之前的创建数据库和创建表&#xff0c;类型、约束都是用的DDL【data definition language】 数据定义语言&#xff0c;用来维护存储数据的结构 代表指令: create, drop, alter 那么现在我们来学习数据操纵语言 DML【data manipulation language】 数据操纵语言&#xff0c;用来…