如何转换Collection <! - ?将ObjectFrame扩展 - >到map

时间:2017-04-24 15:39:21

标签: java collections robotics

我正在使用基于OS的工业机器人控制器,利用java进行编程(KUKA IIWA机器人)开发软件的公司为机器人编程提供自定义库。

我有一个名为loadAllFrames()的方法返回(图片显示该方法的javadoc):

Collection<? extends ObjectFrame>

javadoc for loadAllFrames

.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());

这给了我上面的输出。

任何帮助将不胜感激。

3 个答案:

答案 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!