hutool的csvrowhandler怎么用

hutool的csvrowhandler怎么用,第1张

CsvRowHandler是Hutool中用于解析CSV文件的一种处理器,它实现了RowHandler接口,并提供了一种简单的方式来处理CSV文件中的每一行数据。它的使用方式很简单,只要实现handle方法,并在其中添加所需要的处理逻辑即可:

public class MyCsvHandler implements CsvRowHandler {

@Override

public void handle(int rowIndex, List<Object> rowlist) {

// 对每一行数据进行处理

// rowIndex:行号,从0开始

// rowlist:当前行所有列的值组成的列表

}

}

使用时,只需要将此处理器作为参数传递给CsvUtil的read方法即可:

CsvUtilread(File, Charset, MyCsvHandler);

此处理器可以处理每一行CSV文件中的数据,从而实现更灵活的处理,比如获取每一行数据,统计每一行数据的总和等。

在JAVA中,想要把一个list中的内容添加至另一个list中,有两种方法:

采用循环的方法。通过循环第一个ArrayList,然后通过每循环一次的方式,将值赋值给另一个ArrayList。具体代码实现如下:

2采用ArrayList自带的addAll()方法。addAll()方法是通过传入整一个List,将此List中的所有元素加入到新的List中,也就是当前List会增加的元素个数等于传入的List的大小。该方法较为简单,具体代码实现如下:

1Listadd() 和 ListaddAll() 的区别:

(1)Listadd() 方法,也是往List 中增加list,但是,它增加的是一个List 实例。如果,往容器中增加的那个List 实例从数据库中查到的结果有5条,不过,如果使用了Listadd(list1);程序只会输出一条记录。原因就是上面说的。Listadd() 加List 实例,它会把这个看一个实例,而不是把那个看成一个容器。

(2) 例如:Listadd(list1),Listadd(list2);Listadd(list3),  这时,Listsize 它的大小是3。

(3)Listadd() 的含义就是:你往这个List 中添加对象,它就把自己当初一个对象,你往这个List中添加容器,它就把自己当成一个容器。

(4)ListaddAll()方法,就是规定了,自己的这个List 就是容器,往里面增加的List 实例,增加到里面后,都会被看成对象。

(5) 这时:Listadd(list1),Listadd(list2);Listadd(list3),  这时,Listsize 它的大小就是所有list 实例化后的总数和总的记录数。

2集合是Java API所提供的一系列类,可以用于动态存放多个对象。集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型。集合中不能放基本数据类型,但可以放基本数据类型的包装类。 集合类全部支持泛型,是一种数据安全的用法。java列表是集合的一种,并且列表中的元素是有序的,且允许重复。java列表又称为java list。

参考资料:

Java List_百度百科

对于实现:把一个list集合的数据拷贝到另一个集合list中,有2种方式:

方式一:

定义两个集合oneList 、twoList ,然后 for遍历oneList,把遍历的结果add到 twoList 集合中;

方式二:

定义两个集合oneList 、twoList ,用addAll()方法,twoListaddAll(oneList);

maven依赖(jdk8对应版本5 而jdk7对应版本4)

栗子:(Convert)

DateUtil: 日期时间工具类,定义了一些常用的日期时间 *** 作方法。

StrUtil:字符串工具类,定义了一些常用的字符串 *** 作方法。

ClassPathResource:获取classPath下的文件,在Tomcat等容器下,classPath一般是WEB-INF/classes。

NumberUtil :数字处理工具类,可用于各种类型数字的加减乘除 *** 作及判断类型。

BeanUtil:JavaBean的工具类,可用于Map与JavaBean对象的互相转换以及对象属性的拷贝。

CollUtil:集合 *** 作的工具类,定义了一些常用的集合 *** 作。

MapUtil:Map *** 作工具类,可用于创建Map对象及判断Map是否为空。

AnnotationUtil:注解工具类,可用于获取注解与注解中指定的值。

SecureUtil:加密解密工具类,可用于MD5加密。

CaptchaUtil:验证码工具类,可用于生成图形验证码。

Hutool中的工具类很多,可以参考: >

解决如何获取excel所有sheet的名称的步骤如下:

1想要获取Excel中所有sheet页名称做成目录,首先“插入”一个sheet页做为目录页,并在A1和B1填写“获取名称”和“列表目录”。

2点击菜单栏“公式”后,单击“定义名称”。名称中填写标识,引用位置填写“=getwortbook(1)”后,点击“确定”,完成组合定义。

3单击A2单元格,输入"=index(标识,row(a2))"回车;鼠标左键点击a2单元格右下角,鼠标变成“+”号后往下拖动鼠标即可将所有sheet页名称填充到列表中,完成sheet名称获取。

4获取的列表名称是带有文件名称的,需要将文件名称去掉。单击B2单元格,输入“=right(a2,len(a2)-find("xlsx]",a2,1)-4)”获取最终的列表目录。选中此列所有名称,按“ctrl+c”复制后,右键选择“值粘贴”完成列表。 

这样就解决了如何获取excel所有sheet的名称的问题了。

知其然,知其所以然

此博文的依据:hutool-565版本源码

获得年的部分

源码的DateTimeof(date)year()可拆解成两部分

第一部分,看代码很好理解,就是类型的转化

第二部分,

从代码跟下来,可以发现会走到 toCalendar()get(field)

toCalendar()会得到Calendar,这会就好理解可以获取年了。

不止可以获取年,还可以获取年,月,日,时,分,秒。详细介绍可以看这里:万字博文教你搞懂java源码的日期和时间相关用法

获得指定日期所属季度,从1开始计数

源码的DateTimeof(date)quarter()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,month()获取DateTime对应的月份,然后再做了一个简单计算。

getField方法上面有介绍了,这里就不水字了。

获得指定日期所属季度,返回的是季度枚举对象Quarter

源码的DateTimeof(date)quarterEnum()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,quarter()上面有源码分析,结论是获取 获得当前日期所属季度,从1开始计数

Quarterof(int)就是把对应的数值转为对应的枚举Quarter

获得月份,从0开始计数

源码的DateTimeof(date)month()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得月份,返回月份枚举对象Month

源码的DateTimeof(date)monthEnum()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,month()是获得月份,从0开始计数

Monthof(int)就是把对应的数值转为对应的枚举Month

获得指定日期是所在年份的第几周

此方法返回值与一周的第一天有关,比如:

2016年1月3日为周日,如果一周的第一天为周日,那这天是第二周(返回2)

如果一周的第一天为周一,那这天是第一周(返回1)

跨年的那个星期得到的结果总是1

源码的DateTimeof(date)weekOfYear()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是所在月份的第几周

源码的DateTimeof(date)year()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是这个日期所在月份的第几天

源码的DateTimeof(date)dayOfMonth()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是这个日期所在年的第几天

源码的DateTimeof(date)dayOfYear()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是星期几,1表示周日,2表示周一

源码的DateTimeof(date)dayOfWeek()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期是星期几

源码的DateTimeof(date)dayOfWeekEnum()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,dayOfWeek()是获得指定日期是星期几,1表示周日,2表示周一

Weekof(int)就是把对应的数值转为对应的枚举Week

获得指定日期的小时数部分

源码的DateTimeof(date)hour(is24HourClock)可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

is24HourClock DateFieldHOUR_OF_DAY : DateFieldHOUR :is24HourClock 是否24小时制

DateFieldHOUR_OF_DAY :小时,用于24小时制

DateFieldHOUR :小时,用于12小时制

获得指定日期的分钟数部分

例如:10:04:15250 =》 4

源码的DateTimeof(date)minute()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期的秒数部分

源码的DateTimeof(date)second()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

获得指定日期的毫秒数部分

源码的DateTimeof(date)millisecond()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

是否为上午

源码的DateTimeof(date)isAM()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

做了一个判断 CalendarAM == getField(DateFieldAM_PM)

是否为下午

源码的DateTimeof(date)isPM()可拆解成两部分

DateTimeof(date)上面有介绍了,这里就不水字了。

第二部分,getField方法上面有介绍了,这里就不水字了。

做了一个判断 CalendarPM== getField(DateFieldAM_PM)

返回今年

源码的year(date())可拆解成两部分

DateTimedate()

返回当前月份

源码的month(date())可拆解成两部分

DateTimedate()

返回当前月份

源码的monthEnum(date())可拆解成两部分

DateTimedate()

返回当前日期所在年份的第几周

源码的weekOfYear(date())可拆解成两部分

DateTimedate()

返回当前日期所在月份的第几周

源码的weekOfMonth(date())可拆解成两部分

DateTimedate()

返回当前日期是这个日期所在月份的第几天

源码的dayOfMonth(date())可拆解成两部分

DateTimedate()

返回当前日期是星期几

源码的dayOfWeek(date())可拆解成两部分

DateTimedate()

返回当前日期是星期几

源码的dayOfWeekEnum(date())可拆解成两部分

DateTimedate()

返回当前日期的小时数部分

源码的hour(date(), is24HourClock)可拆解成两部分

DateTimedate()

返回当前日期的分钟数部分

源码的minute(date())可拆解成两部分

DateTimedate()

返回当前日期的秒数部分

源码的second(date())可拆解成两部分

DateTimedate()

返回当前日期的毫秒数部分

源码的millisecond(date())可拆解成两部分

DateTimedate()

获得指定日期年份和季节

格式:[20131]表示2013年第一季度

源码的yearAndQuarter(calendar(date))可拆解成两部分

yearAndQuarter方法代码分析:

获取年份 calget(CalendarYEAR)

获取季度 calget(CalendarMONTH) / 3 + 1

然后通过StringBuilder拼接字符串

获得指定日期区间内的年份和季节

如上面代码所示,有个判空处理

然后,写了一个while循环,把符合条件的年份和季度存到LinkedHashSet里,存完一个年份和季度的字符串后,会给开始时间增加3个月,如果开始时间超出结束时间,让结束时间为开始时间,处理完后结束循环

以上就是关于hutool的csvrowhandler怎么用全部的内容,包括:hutool的csvrowhandler怎么用、怎么把一个list的内容加入到另一个list中、一个list集合数据拷贝到另一个集合中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9710216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存