小编nov*_*ice的帖子

如何使用流合并一组地图

我有一组地图:

Collection<Map<String,Double>> myCol = table.values();
Run Code Online (Sandbox Code Playgroud)

我想把它变成一张地图

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

这样,对于匹配的键,值被加总.使用for循环,它很简单:

Map<String, Double> outMap = new HashMap<>();
for (Map<String, Double> map : myCol) {
    outMap =  mergeMaps(outMap, map);
}
Run Code Online (Sandbox Code Playgroud)

并被mergeMaps()定义为

mergeMaps(Map<String, Double> m1, Map<String, Double> m2){    
    Map<String, Double> outMap = new TreeMap<>(m1);
    m2.forEach((k,v) -> outMap.merge(k,v,Double::sum)); /*sum values if key exists*/
    return outMap;
}
Run Code Online (Sandbox Code Playgroud)

但是,我想使用流来从集合中获取地图.我试过如下:

Map<String, Double> outMap = new HashMap<>();    
myCol.stream().forEach(e-> outMap.putAll(mergeMaps(outMap,e)));
return outMap;
Run Code Online (Sandbox Code Playgroud)

这没有问题.但是,我还能改进它吗?我的意思是,我怎么能在其中使用收藏家?

java java-8 java-stream

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

如何在java中的Queue前面添加一个元素?

我正在使用Queue<T> q1并且我知道将q1.offer();在队列末尾添加一个元素。但是现在,我想要做的是在队列前面添加一个元素,这是队列无法实现的。我能想到的可能方法是

  • 使用双端队列,我可以在前面和最后添加元素。
  • 反转 q1,在队列末尾添加元素并再次反转。

现在,作为一个非程序员的人,我不确定如何编写这些方法;哪个更经济,更容易做。

我在 1) 中遇到的问题是将现有 Queue 转换为 Deque,反之亦然;并在 2) 如何使用Collections.reverseOrder();来反转现有的队列。

java queue reverse deque

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

如果存在于鱼中则移除

我已经开始使用fish,我明白fish和常规bash 之间有几个主要的区别(我使用过mac终端).

我的一些别名没有用,我能解决.但是,我无法解决以下问题.基本上,我想删除所有与给定扩展名匹配的文件.

alias texclr=rm -v *.aux *.log *.out *.spl *.bbl *.synctex.gz *.blg *.lof *.lot *.tdo *.toc *.idx *.nav *.snm *.a* *.g* *.l* *.ist *.run.xml *-blx.* *.fff *.bcf
Run Code Online (Sandbox Code Playgroud)

但是,它似乎不起作用,并在第一次出现不匹配的文件时产生错误.

我的问题是:

  1. 有没有办法可以删除文件,如果存在(最好是一个班轮)?
  2. 它在概念上是错误的吗?

任何指针都会有所帮助.

bash fish

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

R 中向量的连续行的运算

我不知道如何用更好的方式表达它。这是我的问题。

一个非常简单的数据框,比如——

 df= {"time"   "east"   "north"   
         1      0      0
         2      2      0
         3      1      0
         4      1      2 
     }
Run Code Online (Sandbox Code Playgroud)

现在,我想添加两个连续时间范围(第一行除外)之间的距离(作为另一列)。例如,time==2距离应计算为sqrt( (2-0)*(2-0) + (0-0)*(0-0) )。可能的结果可能是这样的

 df= {"time"   "east"   "north"  "distance"   
         1       0        0         0
         2       2        0         2
         3       1        0         1
         4       1        2         2
     }
Run Code Online (Sandbox Code Playgroud)

当然,我想要一种方法来获取从连续两行向东和向北的距离,并返回点之间的欧几里德距离。 1)如何获得数据框中两个连续点之间的距离?

我想对巨大数据帧的子集应用类似的操作或可配置函数(距离、连续减法等)。最后我想绘制一些片段,例如

index = length(df$time)-1
segments( df$time[index],df$time[index+1], df$distance[index], df$distance[index+1] )
Run Code Online (Sandbox Code Playgroud)

2)是否有更好的方法来绘制连续点的线段?类似这样的指针也将非常有用。

r

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

标签 统计

java ×2

bash ×1

deque ×1

fish ×1

java-8 ×1

java-stream ×1

queue ×1

r ×1

reverse ×1