java - 遍历具有重复值的 Map 并识别共享这些值的键
问题描述
我有一个包含名称和坐标()Map
的类型。这些值用于创建图表。我遇到的问题是一些点共享相同的坐标,因此它们几乎不可见,因为它们一个在另一个之上。为了解决这个问题,我想迭代到并只增加点。<String, Set<Object>>
Double = X,Y
Set
0.01
X
虽然这可以显着解决问题,但它并不是一个完美的解决方案,因为某些点仍然与其他点发生冲突。
有没有办法一次搜索Map
特定范围的值,例如0.1-0.2, 0.2-0.3, etc.
并确定keys
这些范围中出现的内容?X
然后我假设我可以增加在特定范围内共享相同 s 的那些。这将防止添加0.01
到 a 的所有X
skey
并且仅添加到需要的那些。
我的代码:
double i=0.01;
for (Map.Entry<String, Set<Coordinates>> serie : nameToCoordinates.entrySet()) {
List<Double> xData = new ArrayList<>();
List<Double> yData = new ArrayList<>();
for (Coordinates coord : serie.getValue()) {
xData.add(coord.getX()+i);
yData.add(coord.getY());
}
i=i+0.01;
chart.addSeries(serie.getKey(), xData, yData);
}
输入示例:
Point1 [[0.1,0.1,0.1,0.1,0.1,0.1],[0.2,0.3,0.4,0.5,0.6,0.7]]
Point2 [[0.1,0.1,0.1,0.1] ,[0.4,0.5,0.6,0.7]]
Point3 [[0.1,0.1] ,[0.6,0.7]]
解决方案
您可以创建一个看起来像这样的函数。它会返回所有在最小和最大范围之间具有 x 或 y 坐标的键。你只需要对它返回的键列表做一些事情。就像增加属于该键的值一样。当然,稍微更改函数以适应您正在使用的对象类型:p。祝你好运!
private List<String> getKeyRange(Map<String, List<Object> map, double min, double max){
List<String> keys = new List<>();
for(String key : map.getKeys()){
Object coord = map.get(key);
if( (coords.getX() > min && coords.getX() < max) || (coord.getX() > min && coord.getY() < max) ){
keys.add(key);
}
}
return keys;
}
推荐阅读
- kotlin - 为什么 kotlin 提供空安全运算符而不提供异常安全运算符?
- c++ - 实例化函数模板时省略模板类型参数是否合法?
- angular7 - Angular 7:获取区域设置千分隔符和十进制标记字符
- android - 是否可以通过在 XML android 中传递参数来创建按钮?
- oracle - 使用 pyspark 或 sqoop 导入从 oracle 读取数据的最有效方法?
- linear-programming - 如何增加 SCIP 求解器日志的详细级别
- ios - 安装 Ruby gem 'cocoapods' 失败
- flutter - Flutter - 创建 TabledToggledButtons 的最佳方法?
- django - Django 跳跃模型 id 号(AutoField)
- maven - 将旧的 Play 2.3.4 项目导入 IntelliJ 会导致服务器错误:需要 HTTPS