我有一个名为坐标
的对象
列表,每个坐标包含三个值。两个double
x、y类型和一个string
名称。我的代码接收坐标项作为输入,并通过创建
类型的map
来根据名称对它们进行分组。通过这种方式,我没有一对坐标与一个名字相关联,而是有一个名字与所有相应的坐标相关联。
例如。:
地图前:
[0.01,0.51] --> A
[0.01,0.56] --> A
[0.01,0.61] --> A
[0.01,0.66] --> AB
[0.01,0.71] --> ABC
[0.01,0.76] --> ABC
其中A、B和C是名称。如果多个名称出现在一起,则表示它们共享相同的坐标。
地图后:
[[0.01,0.01,0.01],[0.51,0.56,0.61]] --> A
[[0.01,0.01], [0.61,0.66]] --> AB
[[0.01, 0.01], [0.71,0.76]] --> ABC
我想要实现的是将每个名字从组中分离出来,并将所有坐标链接到那个名字。
例如。我想要达到的目标:
[[0.01,0.01,0.01,0.01,0.01,0.01],[0.51,0.56,0.61,0.66,0.71,0.76]] --> A
[[0.01,0.01,0.01,0.01], [0.61,0.66,0.71,0.76]] --> B
[[0.01,0.01], [0.71,0.76]] --> C
创建映射
并按名称对其分组的代码如下:
Map<String, List<Coordinates>> newList = coordinateList.stream()
.collect(Collectors.groupingBy(Coordinates::getName));
有没有办法做到这一点?请注意,名称(例如ABC)不是用逗号或空格分隔的,但如果它有助于一个可能的解决方案,我已经知道如何这样做了(a,B,C)。
坐标类:
public class Coordinates {
private double X;
private double Y;
private String name;
public Coordinates(double dexp, double dent, String name) {
this.X=dexp;
this.Y=dent;
this.name=name;
}
@Override
public String toString() {
return "["+X+","+Y+"]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getX() {
return X;
}
public void setX(double x) {
X = x;
}
public double getY() {
return Y;
}
public void setY(double y) {
Y = y;
}
}
名称示例:
STEP(One)
STEP(Two)
STEP(One)STEP(Two)
如果我没理解错的话,我们假设你已经可以很容易地到达你的第二张地图了。但是,这应该适用于任何一个映射,您甚至可以在此基础上稍微优化它。根据这个假设,使用map
,我们可以根据输入进行累加/合并:
Map<String, List<Coordinate>> myComboMap = /* ... */;
Map<String, List<Coordinate>> myAbsoluteMap = new HashMap<>();
myComboMap.forEach((name, coords) -> {
List<String> names = /* split up name into list, or just iterate */;
names.forEach(n -> {
//merge or create the results for each name
myAbsoluteMap.compute(n, (key, old) -> {
if (old == null) {
//copy list to avoid changing old map
return new ArrayList<>(coords);
}
//or append to an existing list
old.addAll(coords);
return old;
});
});
});
这也可以通过#flatmap和collectors#tomap使用流来完成,但是该解决方案将涉及创建相当多的对象,因此为了简单起见,我使用了一个副作用#foreach。
注意:这将创建一个单名到它们各自坐标的地图。您可以很容易地翻转该映射(两者都应该相当独特),尽管我自己不确定用例。请记住,如果两个名字在这张地图上有相同的坐标,那么翻转地图可能会导致丢失其中一个名字。因此,我保留了原样的答案,名称->坐标。
我的REST控制器需要以下格式的请求输入,它成功地将其转换为包含映射和字符串作为参数的Java对象: 我从html表单中获取数据,如下所示: 基本上,这段代码可以归结为: 这会导致包含{key1=的映射 但是,我最终会得到以下字符串:'{"myMap":{},"String":"myString"}'。所以我可能必须做一些不同的事情来对地图进行字符串化,但是我尝试的都不起作用。 有人能帮我吗?
我正在尝试访问HTML代码中特定的元素。 定义元素的代码部分如下所示 。 在下面的第二行代码之后,我尝试声明表达式和,它们都返回java.lang.String类型的“oddrow cellcont” 但是,我尝试了下面的代码片段,它不能工作,因为循环中的条件返回false。我还尝试使用和、、、...以所有可能的组合使用if条件。 我肯定被困住了;我需要帮助。
本文向大家介绍aurelia 基于命名约定创建自定义元素,包括了aurelia 基于命名约定创建自定义元素的使用技巧和注意事项,需要的朋友参考一下 示例 通过CustomElement在类名中简单地添加后缀,即可基于命名约定在Aurelia中创建一个基本的自定义元素。此后缀将由Aurelia自动删除。类名称的其余部分将被小写并使用连字符分隔,然后可用作元素名称。 示例: my-element.js
问题内容: 我正在使用jQuery CSS函数设置某些元素的样式 这可行,但是页面加载后会动态创建部分元素。这应该是 我被创建的事件困住了。有任何想法吗? 问题答案: 创建的元素没有事件(无论如何都无法通用)。你可以 将规则添加到样式表,以便将其自动应用于新创建的元素 创建元素时,链接 css() 方法: 动态创建一个新的样式表:
本文向大家介绍基于String变量的两种创建方式(详解),包括了基于String变量的两种创建方式(详解)的使用技巧和注意事项,需要的朋友参考一下 在java中,有两种创建String类型变量的方式: 第一种方式创建String变量时,首先查找JVM方法区的字符串常量池是否存在存放"abc"的地址,如果存在,则将该变量指向这个地址,不存在,则在方法区创建一个存放字面值"abc"的地址。 第二种方式
根据一个字符串创建一个元素(不附加到 document )。 如果给定的字符串包含多个元素,则只返回第一个元素。 使用 document.createElement() 来创建一个新的元素。 将它的 innerHTML 设置为作为参数提供的字符串。 使用 ParentNode.firstElementChild 来返回字符串的元素版本。 const createElement = str => {