小编Pie*_*ira的帖子

EL以人类可读的格式打印持续时间

首先,我是新手java.time包装.

我正在编写一个webapp,需要在一天中的特定时间和几个事件持续时间内工作.

所以我用包LocalTimeDuration类编写了我的代码java.time.

当我需要在JSP中呈现它们的值时,它对于LocalTime对象来说非常简单(因为.toString()返回一个人类可读的变量),所以我可以只是编写${startTime}并且所有内容都以正确的方式进行(例如,它呈现为9:00).相同的方法对于持续时间不起作用,因为它的表示类似于PT20M(在这种情况下为20分钟).

是否存在一种优雅的方式来直接通过EL在JSP中执行人类可读的转换?

是的,我知道我可以在我的类中(在JSP之前)转换字符串中的对象,但我正在寻找建议的方法(我无法找到)...另一点是我看不到在Duration对象中官方的"convert()"(或其他任何)方法...所以我在想我正在使用错误的对象来映射持续时间(在LocalTimes 上加或减).

谢谢.

java jsp java-8

5
推荐指数
2
解决办法
3779
查看次数

Random ArrayIndexOutOfBoundsException,使用stream按值对Map元素进行排序

在最后几天,我开始"玩"一些Java 8功能,比如流(我研究了一些文档和几个例子).

在我的应用程序中,我有一个Map,我需要获得具有最高值的三个元素(float部分).

我尝试对我的代码进行不同的修改(以及其中一些解决方案:按地图<键,值>按值(Java)排序),例如:

Map<Long, Float> great = createMapWith20Elements();
Map<Long, Float> small = great.entrySet().stream()
        .sorted(Map.Entry.<Long, Float>comparingByValue().reversed()) 
        .limit(3) 
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)

但是reslt总是一样的:有时代码工作正常,其他它给了我一个

java.lang.ArrayIndexOutOfBoundsException: 19
Run Code Online (Sandbox Code Playgroud)

在极少数情况下,超出界限的指数为18.

这种"随机"行为(18,19或正确的阐述)让我想到了一个"平行线程"问题.

我确定great地图总是有20个元素......如果我打印它们我收到:

2,-0.5
3,0.0
4,0.0
5,0.0
6,0.0
7,-0.33333334
8,0.0
9,0.0
10,0.0
11,0.0
12,0.5
13,0.0
14,0.0
15,-0.5
18,0.0
19,0.0
21,0.0
22,0.0
23,0.0
24,0.0
Run Code Online (Sandbox Code Playgroud)

我意识到有17个对象可以成为前3个......但对我的算法来说这不是问题.

你能以某种方式帮助我吗?

谢谢

编辑:

该方法createMapWith20Elements()有一个虚拟名称,以便更好地解释我的情况:我确定它返回20个元素,因为它使数据库读取...但它应该返回任何匹配的记录.

顺便说一下它结束了

// myIds is an ArrayList<Long>
myIds.parallelStream().forEach(e -> trust.put(e, 0f));
return trust;
Run Code Online (Sandbox Code Playgroud)

替换myIds.stream()它似乎工作正常...我无法弄清楚如何使用parallelStream写入对象(Collection而不是Stream),并返回对象本身(Collection),在调用函数中它可能导致这种问题.

java java-8

4
推荐指数
1
解决办法
2903
查看次数

标签 统计

java ×2

java-8 ×2

jsp ×1