java8 Stream流【华为3面】
华为三面@java8 stream流操作面试题
前言:华为三面考了个很简单的基础编程,就是java8 Stream流操作,太久没写,也是没掌握好java基础直接搞得措手不及,stream两行代码的事情,写了好久,用各种集合写完了,还漏了一个要求。
题目如下:
停车记录表中记录三个字段:车牌号,停车日期,停车时长;要求统计出,某月份停车时长最长的前5,如果存在相同时长则按照车牌号的字段序统计;要求自己定义数据结构,赋值,输出结果。数据举例
{“B01562”,“2021-05-26”,“15”},
{“B01562”,“2021-05-27”,“18”},
{“B01563”,“2021-05-27”,“17”},
{“B01560”,“2021-05-27”,“11”},
{“B01563”,“2021-05-26”,“16”}
定义数据结构
这里我用了lombok注解,当时的环境中没有引入,但是生成get、set方法很方便
@Data
class Record{/*** 车牌号*/private String carNo;/*** 停车日期 2015-12-01*/private Date parkDate;/*** 停车时间*/private Integer duration;}
先简单处理下数据,将二元数组转为list
/*** 二元数组转List<Record>* @param data* @return*/private static List<Record> process(String[][] data){List<Record> list=new ArrayList<>();SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");//idea 包裹代码段快捷键 ctrl+alt+Ttry {for (String[] item : data) {Record record=new Record();record.setCarNo(item[0]);record.setParkDate(sdf.parse(item[1]));record.setDuration(Integer.valueOf(item[2]));list.add(record);}} catch (ParseException e) {e.printStackTrace();}return list;}
main函数
数组题目中有给,车牌号什么的是我后面自己写随便写的
public static void main(String[] args) {String[][] data=new String[][]{{"B01562","2021-05-26","15"},{"B01562","2021-05-27","18"},{"B01563","2021-05-27","17"},{"B01560","2021-05-27","11"},{"B01563","2021-05-26","16"}};statLimit5(5,process(data)).forEach(item-> System.out.println(item.getCarNo()+"当月停车时长:"+item.getDuration()));}
主要的统计方法
当时忘记排序了,也不知道两个字段要如何排序,已经顺序逆序等
/*** 统计总时长的前五,时长一致,按照车牌号排序* @param month* @param recordList* @return*/private static List<Record> statLimit5(int month,List<Record> recordList){List<Record> statList=new ArrayList<>();recordList.stream().filter(item -> getDateByField(item.getParkDate(), Calendar.MONTH) + 1 == month).collect(Collectors.groupingBy(Record::getCarNo, Collectors.toList())).forEach((k,v)->{Record r=new Record();r.setCarNo(k);r.setDuration(v.stream().map(Record::getDuration).reduce(0,Integer::sum));statList.add(r);});return statList.stream().sorted(Comparator.comparing(Record::getDuration).reversed().thenComparing(Record::getCarNo)).limit(5).collect(Collectors.toList());}
工具方法
这个方法是获取日期中月份用的,当时编程Date类里的getMonth已经不推荐使用了,后面查了下,应该使用calendar的get方法,之所以多些这个方法是考虑到可能有需求对比年、月、日
/*** 获取日期的对应字段的值* @param date* @param field* @return*/private static int getDateByField(Date date,int field){Calendar calendar=Calendar.getInstance();calendar.setTime(date);return calendar.get(field);}
总结
其实这个题比起算法题简单多了,但是对java的基础考察的很好。需要:
- 定义实体类,优雅的生成测试数据
- 测试数据录入时,字符串转化为时间的方法
- Collectors的分组方法、toList方法;
- Comparator的comparing、thenComparing、reversed方法等;
- Calendar 中获取月份字段时需要+1的坑处理,替代Date中废弃的getMonth方法等
- java 8 Stream的操作熟练度等等
java8 Stream流【华为3面】相关推荐
- Java8——Stream流
Java8--Stream流 Stream是数据渠道,用于操作集合.数组等生成的元素序列. Stream操作的三个步骤: 创建Stream 中间操作 终止操作 一.获取stream的四种方式 1.通过 ...
- java8 stream流 将一个list转换成list
java8 stream流 将一个对象集合转换成另一个对象集合 案例一: // 利用stream进行类型转化 List<String> stringList = new Array ...
- Java8 Stream 流 一些使用整理(持续更新)
Java8 Stream 流 一些使用整理 双循环判断值 原始写法 Stream 普通写法 Stream filter + anyMatch写法 持续更新中 双循环判断值 原始写法 List<C ...
- 学习Java8 Stream流,让我们更加便捷的操纵集合
1. 概述 本篇文章会简略的介绍一下 Lambda 表达式,然后开启我们的正题 Java8 Stream 流,希望观众老爷们多多支持,并在评论区批评指正! Java8 的 Stream 流使用的是函数 ...
- Java8 Stream流递归,几行代码搞定遍历树形结构
欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...
- [转载] Java8 Stream流遍历 如何使用索引
参考链接: Java 8中迭代带有索引的流Stream 1. 问题来源 Java8的Stream流为我们的遍历集合带来了方便,基本可以取代for循环了.但是有一些情况需要知道当前遍历的索引,使用for ...
- [编程] Java8 Stream(流式计算) 常见的一些用法汇总
前提:以下基于 List<Student> 列表进行举例,大家实际使用进行举一反三即可.大同小异,Java8 的流式计算功能很强大,需要大家实际应用中逐渐挖掘更高级的用法. Student ...
- Java8 Stream流操作在用户系统中的妙用
在做目前这个项目的时候,发现以前有一个筛选的需求,老程序员是这么做的,先请求Http服务器得到一长串json数据,大概用A4纸打了40多页那么多,然后将这些对象写入到sqlite数据库中,再用数据库查 ...
- java8 Stream流
目录 前言 一.stream的使用场景特点 特点: 二.初步体验一下stream 三.简单看一下Stream的常用API 3.1 forEach()遍历集合中的对象 3.2filter对流对象进行过滤 ...
最新文章
- C++ memset
- Apache Flink 零基础入门(十一)Flink transformation
- Diagram of Interpositioning and Default Global Scope插入和默认全局范围图
- C语言 数组中删除指定字符
- 【毕业设计】jSP在线教学质量评价系统的设计与实现(源代码+论文)
- Ubuntu Mysql安装配置
- NYOJ11 - 奇偶数分离
- 每日算法系列【LeetCode 503】下一个更大元素 II
- 后台仿京东商城接口设计缺陷吐槽篇
- 华三ap设置无线服务器,H3C无线控制器V5版本配置AP上线的方法
- MATLAB db4小波分解与重构,语音降噪
- ib网卡命令_InfiniBand 网卡测试
- 科技风杂志科技风杂志社科技风编辑部2022年第16期目录
- android apktool反编译,apktool反编译工具
- Elasticsearch:使用向量搜索来查询及比较文字 - NLP text embedding
- 不折腾会死星人Kindle Paperwhite4拆机翻新记
- 问题事件名称: APPCRASH(解决方法)
- win服务器物理内存占用高,win10系统长时间使用物理内存过高的解决方法
- java网络编程实用精解_Java网络编程实用精解
- R语言:优雅、卓越的统计分析及绘图环境