- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个对象类型列表 - TrackingMessage,其中包含日期。该列表可以包含 5 到数千个条目。
我需要遍历该列表来比较每个日期,以找到最接近分钟的日期。该列表在一分钟内可能包含 3 或 4 个条目,因此需要找到最接近分钟的条目,然后将其四舍五入到最接近的分钟。
即 12:45:22、12:45:35、12:45:15
从上面的小示例中,它将选择 12:45:15 作为最接近分钟的值,然后将其四舍五入到最接近的分钟 - 12:45:00>.
我目前的代码如下:
返回根据时间排序和舍入的消息列表的方法
private List<TrackingMessage> findTrackingMessageDatesToNearestMinute(List<TrackingMessage> filteredTrackingMessages) {
return filteredTrackingMessages.stream()
.sorted(orderByClosestToMinute)
.filter(JourneyServiceUtil.distinctByKey(x -> roundToClosestMinute(x)))
.sorted(comparing(TrackingMessage::getEventTime))
.collect(Collectors.toList());
}
传入流的比较器
public Comparator<TrackingMessage> orderByClosestToMinute = (tm1, tm2) -> {
LocalDateTime roundedTrackingMessage1 = roundToClosestMinute(tm1);
LocalDateTime roundedTrackingMessage2 = roundToClosestMinute(tm2);
Duration tm1Duration = Duration.between(DateTimeUtils.toLocalDateTime(tm1.getEventTime()), roundedTrackingMessage1).abs();
Duration tm2Duration = Duration.between(DateTimeUtils.toLocalDateTime(tm2.getEventTime()), roundedTrackingMessage2).abs();
return tm1Duration.compareTo(tm2Duration);
};
将时间四舍五入到最接近的分钟的函数
private LocalDateTime roundToClosestMinute(TrackingMessage trackingMessage) {
return DateTimeUtils.toLocalDateTime(DateUtils.round(trackingMessage.getEventTime(), Calendar.MINUTE));
}
去重函数
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
现在这段代码可以工作了,但是这段代码返回的响应如下:
{
"status": "success",
"serviceId": "d8f2092b-01de-424f-9068-32c4efdcfd45",
"driverId": "e1275ef6-f885-4724-9255-2e03868df5ee",
"eventList": [
{
"eventTime": "2019-07-18T13:09:01",
"eventId": 15,
"lat": 50.4130166,
"lon": -5.0739198
},
{
"eventTime": "2019-07-18T13:10:04",
"eventId": 21,
"lat": 50.412991299999995,
"lon": -5.073924
},
{
"eventTime": "2019-07-18T13:11:04",
"eventId": 21,
"lat": 50.413074599999995,
"lon": -5.074010299999999
},
{
"eventTime": "2019-07-18T13:12:04",
"eventId": 21,
"lat": 50.4131295,
"lon": -5.0739676
},
{
"eventTime": "2019-07-18T13:13:04",
"eventId": 21,
"lat": 50.4133475,
"lon": -5.073917499999999
},
{
"eventTime": "2019-07-18T13:14:04",
"eventId": 21,
"lat": 50.4133618,
"lon": -5.0739218
},
{
"eventTime": "2019-07-18T13:15:04",
"eventId": 21,
"lat": 50.4133333,
"lon": -5.073961
},
{
"eventTime": "2019-07-18T13:16:04",
"eventId": 21,
"lat": 50.4132803,
"lon": -5.0739765
},
{
"eventTime": "2019-07-18T13:17:04",
"eventId": 21,
"lat": 50.4133433,
"lon": -5.0739588
},
{
"eventTime": "2019-07-18T13:18:04",
"eventId": 21,
"lat": 50.413306999999996,
"lon": -5.0739355999999995
},
{
"eventTime": "2019-07-18T13:19:04",
"eventId": 21,
"lat": 50.4133013,
"lon": -5.073953599999999
},
{
"eventTime": "2019-07-18T13:20:04",
"eventId": 21,
"lat": 50.413309299999995,
"lon": -5.073988099999999
},
{
"eventTime": "2019-07-18T13:21:04",
"eventId": 21,
"lat": 50.4133146,
"lon": -5.0739618
},
{
"eventTime": "2019-07-18T13:22:04",
"eventId": 21,
"lat": 50.413287999999994,
"lon": -5.0739141
},
{
"eventTime": "2019-07-18T13:23:04",
"eventId": 21,
"lat": 50.4132981,
"lon": -5.0739008
},
{
"eventTime": "2019-07-18T13:24:04",
"eventId": 21,
"lat": 50.413283,
"lon": -5.07386
},
{
"eventTime": "2019-07-18T13:25:03",
"eventId": 52,
"lat": 50.413303,
"lon": -5.0738673
},
{
"eventTime": "2019-07-18T13:26:01",
"eventId": 60,
"lat": 50.4135111,
"lon": -5.0737745
},
{
"eventTime": "2019-07-18T13:27:02",
"eventId": 130,
"lat": 50.415140099999995,
"lon": -5.073355299999999
},
{
"eventTime": "2019-07-18T13:28:00",
"eventId": 125,
"lat": 50.4139743,
"lon": -5.0697981
},
{
"eventTime": "2019-07-18T13:29:01",
"eventId": 21,
"lat": 50.4186421,
"lon": -5.0698473
},
{
"eventTime": "2019-07-18T13:30:09",
"eventId": 153,
"lat": 50.418105999999995,
"lon": -5.0624391
},
{
"eventTime": "2019-07-18T13:30:50",
"eventId": 21,
"lat": 50.4185011,
"lon": -5.0581641
},
{
"eventTime": "2019-07-18T13:31:59",
"eventId": 21,
"lat": 50.417915099999995,
"lon": -5.0517363
},
{
"eventTime": "2019-07-18T13:33:02",
"eventId": 131,
"lat": 50.4194111,
"lon": -5.0496058
},
{
"eventTime": "2019-07-18T13:35:34",
"eventId": 51,
"lat": 50.4194153,
"lon": -5.049543
}
]
}
正如您所看到的(向底部),我们在 13:30 内有两次 {2019-07-18T13:30:50、2019-07-18T13:30:09}
从技术上讲,我希望选择 2019-07-18T13:30:09,因为它最接近分钟(相差 9 秒,而另一个相差 10 秒)
此外,如果您查看响应,时间会以秒为单位,并且不会向下舍入。
如果不清楚,请随时提出任何进一步的问题。
最佳答案
您似乎想要计算自一分钟开始以来经过的秒数。因此,在您的示例中,13:30:09 表示该分钟后 9 秒,13:30:50 表示该分钟后 50 秒。
要计算您可以使用此方法:
public static int distanceToMinute(LocalDateTime t) {
LocalDateTime minute = t.truncatedTo(ChronoUnit.MINUTES);
return (int) ChronoUnit.SECONDS.between(minute, t);
}
对于您给出的两个示例,它将按预期返回 9 和 50。
下一步是按分钟对时间进行分组,例如:
List<LocalDateTime> times = ...
Map<LocalDateTime, List<LocalDateTime>> timesByMinute = times.stream()
.collect(Collectors.groupingBy(t -> t.truncatedTo(ChronoUnit.MINUTES)));
然后将每个列表减少到最接近分钟的元素:
public static LocalDateTime bestTime(List<LocalDateTime> times) {
return times.stream()
.sorted((t1, t2) -> Integer.compare(distanceToMinute(t1), distanceToMinute(t2)))
.findFirst().get();
}
关于java - 比较日期列表并找到最接近分钟的日期,然后选择它并将其四舍五入到最接近的分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58639207/
我想创建一个返回值的方法(我们称之为“z”)。它的值由另一个值决定(我们称之为“y”)。基本上我想要的是满足以下条件: 当 x 接近 0 时,z 接近 100。 当 x 接近无穷大时,z 接近 0。
我正在尝试使用 Java 中的PreparedStatement 执行查询。 当我尝试执行查询时,收到错误号 1064(语法错误)。 我已经在 MySQL 查询浏览器中使用替换值对此进行了测试,效果很
我正在开发一个应用程序来解析 Scala 中的命令。命令的一个例子是: todo get milk for friday 所以计划是让一个非常智能的解析器将行分开并识别命令部分以及字符串中有时间引用的
来自 http://directwebremoting.org/dwr/reverse-ajax/index.html ,它表示它支持轮询、 cometd 、搭载。这是否意味着当我们实现这种方法时,我
我开始研究一个概念,该概念要求我找到一种方法,以给定的速度将矩形移向给定的点。我正在为 Android 开发,所以这对速度非常关键(它也将针对可能的数百个对象计算每一帧。) 我能想到的解决方案如下:
我正在处理一个处理“门票”的表(状态=“开放”或状态=“关闭”)。当票证关闭时,相关系统不会更改状态,而是会创建一个具有“已关闭”状态的重复条目。 对于“ticket_number”关键字段,如果存在
我正在尝试在 python 中执行一些 n-gram 计数,我想我可以使用 MySQL(MySQLdb 模块)来组织我的文本数据。 我有一个很大的表,大约有 1000 万条记录,代表由唯一数字 ID(
我正在尝试将数据添加到 mariadb 表中。我想将 val0 到 val5 作为查询的值传递。但我收到错误 OperationalError: close "%": 语法错误代码 list_Valu
我正在使用 (Py)OpenGL 显示 256 色索引图像。我将着色器与包含调色板的一维纹理一起使用。这是片段着色器代码: #version 330 uniform sampler2D texture
对于我的元素 areallybigpage.com (*),我想看看我们能用 CSS 的 transform: scale(...) 走多远。 这有效并以正常大小显示文本: #id1 { positi
我有两列带有数字数据的 Pandas 表(dtype flaot64)。 我将每列四舍五入到小数点后有 2 位数字,然后使用函数将其四舍五入到接近 0.5,但由于某种原因,只有一列四舍五入为 0.05
我正在构建一个由用户登录和注册组成的应用程序,但每次我在模拟器上测试它时,我都会收到强制关闭。以下是我在日志猫中收到的错误: 08-14 14:06:28.853: D/dalvikvm(828):
我正在尝试在 Python 中实现 Strassen 矩阵乘法。我已经让它发挥了一些作用。这是我的代码: a = [[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]] b
为什么这不起作用?这与 = 附近的命令字符串语法有关,但我似乎无法弄清楚,在线示例似乎完全相同。编辑: Activated In 是一列。 示例来自 How to select data from d
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我有一个测试区,它是来自数据库的动态文本,可能有数千个单词。我希望它中断并在每段中用句号将近 100 个(任意长度)单词作为一个段落。我能够在 100 个单词后中断,但不能完全停止。为了在 100 个
我是 hadoop 和 hive 的新手。我正在尝试将数据加载到配置单元表中,但遇到以下错误。 另一方面,我尝试使用语句 stmt.execute("INSERT INTO employee VALU
这是来自一个统计项目。我定义了下面的函数,但是当n接近400时,第二个方法很慢。第一个方法很好(这里有人帮助了我in this question) import Math.Combinatorics.
我正在尝试创建一个 css 侧边菜单,但是当我关闭菜单并将 div 容器宽度设置为 0 时,链接仍然可见。 这是 jsfiddle - https://jsfiddle.net/atLvp6k7/ 有
我对 MySQL 还很陌生。我必须使用输出参数调用存储过程。我在互联网上搜索了很多,但没有找到解决我的问题的正确方法。如果我使用 @outputParamName 调用存储过程,它会说我在 NULL
我是一名优秀的程序员,十分优秀!