对 List<Map> 结构实现多字段排序

别再写嵌套if了!用Java的Comparator.thenComparing优雅搞定List<Map>多字段排序 本文介绍了如何利用Java 8的`Comparator.thenComparing`链式调用优雅实现`List<Map>`多字段排序,避免传统嵌套if-else的复杂逻辑。通过实际代码示例和性能对比,展示了链式调用的可读性、维护性和类型安全优势,并提供了处理null字段、动态构建排序条件等高级技巧。 阅读详情

JAVA8 可以用 Lambda 表达式对 List 进行排序,但是只适用于List 中为实体类对象,比如List<Car>,其中Car为汽车类,这类型排序网上很多,一搜就能找到,就不说明了。

但是经常遇到 List<? extends Map> 类型的结构该如何排序呢?下面进入正题。

案例:

在 List 中存入 Map,其中 Map 存入两个属性:roomNo(房间号)、time(时间)。

排序规则:先按照 roomNo 进行升序排列,如果 roomNo 一致再按照 time 降序排列。

下面是代码:

public static void main(String[] args) {
         
        // 生成待用数据
        List<Map<String, Object>> list = Lists.newArrayList();
        Map map1 = new DataMap();
        Map map2 = new DataMap();
        Map map3 = new DataMap();
        Map map4 = new DataMap();
         
        map1.put("roomNo", "0102");
        map1.put("time", "2020-01-01 00:00:11");
         
        map2.put("roomNo", "0101");
        map2.put("time", "2020-01-01 00:00:12");
         
        map3.put("roomNo", "0102");
        map3.put("time", "2020-01-01 00:00:13");
         
        map4.put("roomNo", "0102");
         
        list.add(map1);
        list.add(map2);
        list.add(map3);
        list.add(map4);
         
        // 排序器
        Comparator<Map<String, Object>> comparator = new Comparator<Map<String, Object>>() {
            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                int o1RoomNo = Integer.parseInt(o1.get("roomNo").toString());
                int o2RoomNo = Integer.parseInt(o2.get("roomNo").toString());
                 
                if (o1RoomNo > o2RoomNo) {
                    return 1;
                }else if (o1RoomNo < o2RoomNo) {
                    return -1;
                }else{
                     
                    // 若是相同房间号,则比较时间
                    if (o1.get("time") == null || o2.get("time") == null ) {
                        return 1;
                    }
                     
                    DateTime o1Time = DateTimeUtil.parse(o1.get("time").toString());
                    DateTime o2Time = DateTimeUtil.parse(o2.get("time").toString());
                     
                    if (DateTimeUtil.compare(o1Time, o2Time) > 0) {
                        return -1;
                    }else if (DateTimeUtil.compare(o1Time, o2Time) < 0) {
                        return 1;
                    }
                    return 0;
                } 
            }
        };
         
         
        System.out.println(" --------------------------- 排序前  -----------------------------------");
        System.out.println();
        for (Map map : list) {
            System.out.println(map);
        }
         
        // 排序
        list.sort(comparator);
         
        System.out.println(" --------------------------- 排序后  -----------------------------------");
        System.out.println();
        for (Map map : list) {
            System.out.println(map);
        }
    }



运行程序,打印如下:

 --------------------------- 排序前  -----------------------------------

{"roomNo":"0102","time":"2020-01-01 00:00:11"}
{"roomNo":"0101","time":"2020-01-01 00:00:12"}
{"roomNo":"0102","time":"2020-01-01 00:00:13"}
{"roomNo":"0102"}
 --------------------------- 排序后  -----------------------------------

{"roomNo":"0101","time":"2020-01-01 00:00:12"}
{"roomNo":"0102","time":"2020-01-01 00:00:13"}
{"roomNo":"0102","time":"2020-01-01 00:00:11"}
{"roomNo":"0102"}

 

iPhoneX APP界面设计尺寸图-庞姿姿 ​​本篇分享的是iPhoneX APP界面设计尺寸图,有很多UI新手说起尺寸问题就脑壳疼,其实这并不复杂,下面就来说说iPhoneX APP界面设计尺寸规范,觉得有用的话可以收藏一下,用的时候翻出来看看。下面进入正题。 本篇分享iPhoneX APP界面设计尺寸图到这里就结束了,希望对你有所帮助如果你有什么问题可以随时留言评论,看到就会回复。我将不定时分享一些ps使用的小技巧,如果您想了解更多关于ps使用、平面设计、UI设计相关信息,请持续关注庞姿姿。​​​​ ... 阅读详情

相关推荐

别再写冒泡排序了!用Java Stream的sorted()搞定List排序,从单字段到多字段一篇就够

本文详细介绍了如何使用Java Stream的sorted()方法实现高效、优雅的List排序,从单字段到多字段排序全覆盖。通过对比传统排序方法,展示了Stream排序在代码简洁性、可读性和维护性上的优势,特别适合电商订单处理、用户管理等业务场景。

weixin_30681615的博客 271

List<map>多字段组合降序排序

要对一个包含多个字段的List进行组合降序排序,你可以使用Java的集合排序功能和自定义Comparator。

用作学习记录 1429

Java Stream groupingBy多字段分组实战:从复合键到多级聚合

在数据处理与业务分析中,数据分组是核心操作,它基于特定条件将数据集划分为多个子集,便于后续的统计、分析与可视化。其原理是通过分类函数为每个元素生成一个键,相同键的元素归为一组,通常借助哈希表实现高效映射。这一技术价值在于能大幅简化复杂的数据汇总逻辑,提升代码的可读性与可维护性。常见的应用场景包括生成多维报表(如按部门与职级统计薪资)、用户行为分析以及日志聚合等。本文聚焦于Java Stream API中的`Collectors.groupingBy`方法,深入探讨如何实现**多字段分组**,例如同时按部门、

weixin_30542079的博客 467

List<Map> 多字段排序

package com.example.test; import com.beust.jcommander.internal.Lists; import com.beust.jcommander.internal.Maps; import com.example.utils.DateUtil; import org.junit.Test; import java.util.*; import java.util.stream.Collectors; /** * @author hujt49 * @

xiaodao0706的博客 3190

List<map>多字段组合排序

List,List<Map>,多字段组合排序。提供一个简易的思路,如果需要进行参考。

面板数据门槛归回分析,xthreg的安装,xthreg2安装包

我用的是Stata17,数据是不平衡的面板数据,需要用到xthreg2,虽然我找到了xthreg2.ado,但是还需要安装xthreg,因为运行xthreg2需要xthreg包顺带安装的lxthreg.mlib文件。但是!我后来发现还是不行,最后是去买了一个真正能用到xthreg2的lxthreg.mlib文件,才可以运行。

weixin_55252589的博客 1万+

java中list数组排序问题 List中Map数组根据map中两个或多个字段排序

工作中有个需求,list数组先根据相似度值排序,然后再按照名称的长度排序,由大到小降序。 使用到JAVA8的特性,特此记录一下: 不多说,先上代码: private List<Map<String, Object>> sortList(List<Map<String, Object>> list){ return list.stream().sorted(Comparator.comparing(AipClientController::co

guo_123258的博客 5134

springcloud教程 -- 1.快速搭建入门级demo,看这一篇就够了

废话不多讲,跟紧我,开启你的SpringCloud初体验 首先回顾微服务的基本组成: [图片 here] 生产者:提供服务 消费者:消费服务 服务注册/发现中心:服务注册,发现,监控 所以,首先明白springcloud微服务的架构基础:生产者(client),消费者(client),服务注册/发现中心(server)

叶巨岩的博客 8万+

stream流sorted排序,处理List<Map<String,Object>>

两个字段都按降序排列。处理map的List。

352

用LangFuse+LangChain打造可观测的AI应用:从埋点到成本监控实战

本文详细介绍了如何将开源可观测性平台LangFuse深度集成到基于LangChain构建的AI应用中,特别是电商客服机器人场景。通过从基础SDK集成、提示词管理到成本监控的完整实战,帮助开发者实现对LLM应用内部工作流的清晰追踪、问题排查与费用分析,从而打造稳定、可控的生产级AI应用。

dapp9builder的博客 711

中颖单片机SH79F3213正弦波矢量的电动车小毛驴控制器量产资料

中颖单片机SH79F3213正弦波矢量的电动车小毛驴控制器量产资料 中颖单片机SH79F3213 制作的电动车小毛驴控制器量产资料,已量产十几万片,拿到手即可量产 1、提供原理图 2、提供PCB图 3、提供C语言源代码程序 4、提供清单 ...

m0_69036675的博客 4528

java list多字段排序_java中list通过多条件排序

实现的效果类似于这样,首先通过一级类别id排序,其次是二级类别,最后是二级类别中的各项合计排序; 方法一/*** 单品容器排序** @param productSellStatList* @return*/private void getSortList(List productSellStatList) {Collections.sort(productSellStatList, new Com...

weixin_31421613的博客 2090

AI 辅助代码审查:开启代码质量管控的智能时代

AI辅助代码审查正在改变传统的代码质量管控方式。通过自动化分析、智能反馈和上下文感知,AI不仅提高了代码审查的效率,还提升了代码质量的一致性和可维护性。随着机器学习和深度学习技术的不断发展,未来AI将成为开发者日常工作中强大的助手,进一步推动软件开发向智能化、自动化方向发展。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3229

List根据Map中某一个字段排序以及多个字段排序

list根据map中某一个字段排序以及多个字段排序 public static List<Map<String, Object>> sortByKey(List<Map<String, Object>> mapList,String key){ Collections.sort(mapList, (o1, o2) -> { Integer count1 =Integer.parseInt(o1.get(key).

无证骑士的博客 1114

飞牛fnNAS搭建Web网页版OFFICE(WPS)软件

本文介绍了如何在飞牛NAS上通过Docker容器部署WPS Office办公软件。主要内容包括:启用Docker服务、准备项目文件夹结构、使用Compose方式构建容器、解决端口冲突问题、配置中文输入法和字体库,以及通过ZeroTier实现远程访问。文章详细说明了每个步骤的操作方法,包括容器启动、输入法设置、字体添加和文件存储位置配置。最后还介绍了使用ZeroTier内网穿透技术实现远程访问NAS上WPS服务的方法,让用户可以在不同设备上随时编辑NAS中的文件。整个部署过程完整清晰,为NAS用户提供了便捷的

dgnankai的专栏 1701

Qualcomm 常用NV列表

^ NV ITEM ^ 功能^^ |NV10 |mode prefer,找网模式|新平台使用NV80000| ^NV74 NV74=0关闭自动接听电话^ |NV240 |NV240=FALSE|EVDO出现网络的问题,此项必须设定为FALSE| |NV255 |CDMA规避网络列表(SID/NID号)| |NV256 |

sdrgtywretyeruet的专栏 5771

针对List《Map《String,Object》》多条件组合排序

需求: 对List<Map<String,Object>> 中map的value进行多字段组合排序 话不多说, 直接上代码: public static void main(String[] args) { List<Map<String,Object>> list = new ArrayList<>(); ...

jxwen1的博客 1943

磁环电感参数计算

电感饱和是指当电感中的电流超过一定阈值时,电感中的磁场无法继续增加,而是达到一个饱和状态,导致电感的感应电动势减小或消失。电感通常由线圈组成,当通过线圈的电流不断增加时,线圈内部的磁场也随之增加。然而,当电流达到一定程度时,线圈的铁芯磁化达到饱和,无法进一步增加磁场强度。电感饱和的阈值取决于电感的结构、材料和尺寸等因素。通常情况下,电感的额定电流会标明其饱和电流值。一旦电感中的电流超过了饱和电流,电感将饱和并出现异常行为。当我们谈论电感饱和的时候,实际上是在谈论磁芯饱和——空心的电感永远不会饱和。

小幽余生不加糖 4032

单纯记录<List<Map<>> -------compartatorChain 排序器使用

import org.apache.commons.beanutils.BeanComparator; import org.apache.commons.collections.comparators.ComparatorChain; import java.util.*; /** * @author mahui * @date 2020/8/3 -17:53 */ public class t083 { private Object Map; public static vo

weixin_45494645的博客 319

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java8 stream 中利用 partitioningBy/groupingBy 进行多字段分组求和案例

Java8的groupingBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map 对集合按照单个属性分组、分组计数、排序 List items = Arrays.asList(“apple”, “apple”, “banana”, “apple”, “orange”, “banana”, “papaya”); // 分组 Map<String, List<String>> result1 = items.stream().collect(

扬帆天涯 7310

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java List排序全解析:从基础到高级技巧

集合排序是Java开发中的核心操作,其中List作为最常用的数据结构,其排序效率直接影响程序性能。通过实现Comparable接口或使用Comparator,开发者可以灵活控制排序逻辑。Java 8引入的Stream API进一步简化了排序操作,而并行流则能提升大数据量场景下的处理速度。在实际业务中,多字段组合排序、中文拼音排序等特殊需求都需要特定处理。理解TimSort算法的稳定性特点以及避免常见的空指针异常、比较器契约违反等问题,是写出健壮排序代码的关键。电商商品排序、分页查询等典型场景展示了排序技术的

weixin_33937499的博客 397

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java通用排序工具类

Java通用的排序工具类,支持数组、List、Map、Set排序,

义陆·逍遥 2833

Java通用比较模块实战:对象差异、集合比较与多字段排序

在Java后端开发中,对象比较是绕不开的基础操作。很多开发者习惯用equals判断数据是否变化,但equals只能回答“是否相同”,无法指出具体差异字段。面对二三十个字段的实体,人眼比对几乎不可行。此时需要一个能输出“字段路径+旧值+新值”的比较模块。本文从相等性比较、顺序比较、差异比较三类概念入手,解析反射机制在字段级对比中的原理,并给出不依赖第三方库的JDK 8+实现。该模块覆盖对象字段差异检测、集合交集差集并集计算、多字段排序比较三大场景,可应用于数据审计、配置对比、接口入参校验和报表排序。通过反射兜

weixin_34208283的博客 312

java 排序帮助类_Java通用排序工具类

代码中引用的其他类,请Java通用的排序工具类,支持数组、List、Map、Set排序,排序的内容可以是一个java定义的类型也可以是一个对象,根据对象的属性名称或方法名称进行排序(方法名称需要带括号),支持多个字段排序功能、如果对像中用一个map可以根据key排序对象。设置可以排序一个树型结构的对象。具体Demo和使用方法太多了。。将来有机会在补吧。代码中依赖的类参考地址如下:以下是排序工具类的...

weixin_42569429的博客 335

常用的集合类有哪些?比如List如何排序?

Java集合类分为Collection(单元素存储)和Map(键值对)两大体系。Collection包含有序可重复的List(ArrayList数组实现查询快、LinkedList链表增删快)、无序去重的Set(HashSet哈希表、LinkedHashSet保持顺序、TreeSet红黑树排序)和队列Queue。Map体系包含HashMap(无序哈希表)、LinkedHashMap(有序缓存)和TreeMap(按键排序)。 List排序三种方式:1)实现Comparable接口定义自然排序规则;2)使用Co

ywl470812087的博客 317

java 对list针对map中某个字段排序

Collections.sort(List list, Comparator c) 实现一个Comparator即可 public class MyComparator implements Comparator { public int compare(Object o1, Obj...

200
上一篇: 调用file.renameTo 方法失败
下一篇: Mysql 将有重复值的列设置为主键
白发湘君
博客等级 码龄10年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值