我正在使用基于OS的工业机器人控制器,利用java进行编程(KUKA IIWA机器人)开发软件的公司为机器人编程提供自定义库。
我有一个名为loadAllFrames()的方法返回(图片显示该方法的javadoc):
Collection<? extends ObjectFrame>
.toString输出如下所示:
[nullBase [X=0.00 Y=0.00 Z=0.00 A=0.00 B=0.00 C=0.00],
StartProcess [X=778.16 Y=89.64 Z=699.38 A=1.15 B=1.56 C=-1.97],
appRightCoupon [X=703.49 Y=181.64 Z=649.39 A=1.05 B=1.55 C=-2.12]]
此信息从.xml文件中解析。 我需要获取此信息并将其存储在一些可用的数据结构中。
从我的角度来看,这看起来像匹配地图(例如:map<String, ObjectFrame>
),其中String将是 nullBase ,而ObjectFrame是 [X = 0.00 Y = 0.00 Z = 0.00 A = 0.00 B = 0.00 C = 0.00]
问题是我如何做到这一点?
如何将此Collection<? extends ObjectFrame>
转换为地图。
此时这对我来说太高级了。我正在阅读地图和收藏品,但无法很好地理解我需要在这里做什么。到目前为止,我得到了类似的东西:
Collection<? extends ObjectFrame> test1Collection = defaultDataSource.loadAllFrames();
test1dumpFile.println(test1Collection.toString());
这给了我上面的输出。
任何帮助将不胜感激。
答案 0 :(得分:0)
有些事情如下:
Collection<? extends ObjectFrame> test1Collection = defaultDataSource.loadAllFrames();
Map<String, Object> asMap = new HashMap<>();
Object[] asArray = test1Collection.toArray();
for (int i = 0; i < asArray.length-1; i+=2) {
String key = (String) asArray[i];
Object value = asArray[i+1];
asMap.put(key, value);
}
我将转换用于数组;因为这样可以更容易地记下处理“键/值对”的循环。
关键是
Object value = asArray[i+1];
不是仅将每个第二个条目转储为Object,而是可以仔细查看,看看是否应该/可以构建一个特殊的类来包装这些数据。
上述仅仅是一种灵感;让你去无论是编译还是测试;所以要小心拼写错误或微妙的错误。
答案 1 :(得分:0)
在Java 7中,类似于:
for(Item item : collection) {
map.put(item.getSomething(), item);
}
如果密钥是重复的,这将覆盖以前的映射条目,因此如果存在重复,您需要做一些更聪明的事情 - 使用来自第三方集合库的MultiMap
,或者将其设为Map<List<Item>>
,然后:
for(Item item : collection) {
Something key = item.getSomething();
List<Item> list = map.get(key);
if(list == null) {
list = new ArrayList<>();
map.put(key, list);
}
list.add(item);
}
在Java 8中,为此目的准备了Collector
:
Map<Something,List<Item>> map = collection.stream().collect(Collectors.groupingBy(Item::getSomething));
答案 2 :(得分:0)
Collection<? extends ObjectFrame> test1Collection = defaultDataSource.loadAllFrames();
for(ObjectFrame item : test1Collection) {
System.out.println(item.getName()); //nullFrame
System.out.println(item.copy()); //[X=0.00 Y=0.00 Z=0.00 A=0.00 B=0.00 C=0.00]
}
基于此代码,如果需要,我可以轻松构建我的地图。 THX!