小编Fab*_*Fab的帖子

JAVA - 加速哈希地图创建

我会尽量保持清醒.

我有N个对象列表.每个对象都存储一个ID字段和一个值字段.

LIST A | ID1   v1  | ID2   v2  | ID3   v3  |
LIST B | ID1   v1' | ID2   v2' | ID3   v3' |
LIST C | ID1   v1''| ID2   v2''| ID3   v3''|
Run Code Online (Sandbox Code Playgroud)

我需要创建一个哈希映射

Map<Integer,List<Double>> 
Run Code Online (Sandbox Code Playgroud)

像这样:

------------------------
| ID1 |  v1  v1'  v1'' |
| ID2 |  v2  v2'  v2'' |
| ID3 |  v3  v3'  v3'' |
------------------------
Run Code Online (Sandbox Code Playgroud)

对于每个列表,我现在使用此代码:

object_list.forEach( v -> {
        String id = v.getID();
        Double value = v.getValue();

        if(map.containsKey(id)){
            map.get(id).add(value);
        }
        else{
            List<Double> list …
Run Code Online (Sandbox Code Playgroud)

java hashmap

4
推荐指数
2
解决办法
222
查看次数

使用Java 8 Stream API减少Map

我有以下表格的地图:

Map<Integer, Map<String,Double>> START
Run Code Online (Sandbox Code Playgroud)

让INNER成为内部地图,即

Map<String,Double>
Run Code Online (Sandbox Code Playgroud)

例如,我想在新的地图中减少START地图

Map<Integer, Double> END
Run Code Online (Sandbox Code Playgroud)

它具有相同的键,但值不同.特别是,对于每个键,我希望新的Double值是INNER映射中相应键的值的SUM.

我怎样才能通过使用JAVA 8的STREAM API实现这一目标?

感谢大家.

编辑:示例地图是

------------------------------
|      |  2016-10-02   3.45   |
| ID1  |  2016-10-03   1.23   |
|      |  2016-10-04   0.98   |
------------------------------
|      |  2016-10-02   1.00   |
| ID2  |  2016-10-03   2.00   |
|      |  2016-10-04   3.00   |
------------------------------
Run Code Online (Sandbox Code Playgroud)

我想要一个像以下一样的新地图:

--------------------------------
|      |                       |
| ID1  |  SUM(3.45,1.23,0.98)  |
|      |                       |
--------------------------------
|      |                       |
| ID2  |  SUM(1.00,2.00,3.00)  |
|      |                       |
--------------------------------
Run Code Online (Sandbox Code Playgroud)

java hashmap java-8 java-stream

3
推荐指数
2
解决办法
1万
查看次数

Java - 查找具有最大大小的哈希表

我有以下数据结构:

Map<Integer, Map<String,Double>>

----------------
|     | a    2 |
| 100 | b    1 |    
|     | c    2 |
----------------
|     | a    2 |
| 101 | c    2 |    
----------------
|     | a    2 |
| 102 | b    1 |    
|     | c    2 |
----------------
Run Code Online (Sandbox Code Playgroud)

目标:获取包含具有最大大小的内部地图的外部地图的ID.

例如,100或者102都包含大小为3的内部地图.

Stream API例如,我该如何使用?

java java-8 java-stream

3
推荐指数
2
解决办法
134
查看次数

ORA-04063: 视图有错误

我的数据库中有 3 个用户(架构)。

用户 A 持有表 X

我为用户 B 创建了一个视图 Y,为用户 C 创建了一个视图 Z。这些视图是相同的:

 CREATE OR REPLACE FORCE EDITIONABLE VIEW "user_name"."view_name" ("field_1", "field_2") AS 
  SELECT field1_1
,      field2_2
FROM   User_A.X;
Run Code Online (Sandbox Code Playgroud)

第一个视图工作正常;对于第二个,我在尝试查看数据时出现以下错误(来自 SQL 开发人员):

ORA-04063: 视图“User_C.Z”有错误。

我试图通过 SQL PLUS 创建它:它是在编译错误时创建的,但“显示错误”命令返回“无错误”。

有什么建议吗?

sql oracle ddl sql-view

3
推荐指数
2
解决办法
4万
查看次数

BASH-使用LS和通配符的FOR循环

我的目录包含以下文件:

FILE1_h0_something_1950_other.gz
FILE2_h0_something_1950_other.gz
FILE3_h0_something_1950_other.gz
Run Code Online (Sandbox Code Playgroud)

这是我的bash脚本的一部分:

year=1950
for nc_gz in "$input_path/*h3*$year*.gz"; do
      gunzip $nc_gz
done
Run Code Online (Sandbox Code Playgroud)

我注意到有些时候(奇怪的行为……我总是或永远没有,除非如此)在我的目录中创建了一个名为* h3 * 1950 *的文件。

当目录不包含gz文件时,代码将失败。

问题出在哪里?

谢谢

bash wildcard

2
推荐指数
1
解决办法
1233
查看次数

Oracle存储过程 - 热浪数(一系列模式匹配数)

我需要对Oracle数据集进行后处理才能找到热浪的数量.根据定义,当数据值至少连续两次大于阈值时发生热浪.

例如,给定阈值= 20和序列

23 31 32 17 16 23 16 21 22 18
Run Code Online (Sandbox Code Playgroud)

热浪是2:

{23,31,32} and {21,22}
Run Code Online (Sandbox Code Playgroud)

并且最长的一个长度为3(较大子集的大小)

我的输入数据集由几个序列组成; 示例输入结果集是:

 -----------------------------
|  ID   |    DAY   |   VALUE |
 -----------------------------
|   100 |   1/1/17 |    20   |
|   100 |   2/1/17 |    21   |
|   200 |   1/1/17 |    12   | 
|   200 |   2/1/17 |    24   |
|   ...     ...        ...
Run Code Online (Sandbox Code Playgroud)

换句话说,我每个ID都有一个序列,我需要输出类似的东西:

-----------------------
|  ID   |  #heat waves |
 -----------------------
|   100 |      3       | 
|   200 |      1       | …
Run Code Online (Sandbox Code Playgroud)

oracle

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

来自比较器的未处理异常类型ParseException

我需要对String表示日期的列表进行排序.

我尝试了以下代码:

try {
    SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd");
    Collections.sort(days,
            (s1, s2) -> sdf.parse(s1).compareTo(sdf.parse(s2)));
} catch (ParseException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但在Eclipse中我得到编译时错误sdf.parse(s1):

未处理的异常类型 ParseException

有解决方案吗

我的输入列表是:

[2016-01-02, 2016-01-03, 2016-01-01]
Run Code Online (Sandbox Code Playgroud)

java sorting compiler-errors date simpledateformat

0
推荐指数
1
解决办法
547
查看次数