【问题标题】:Nice way to flatten two vectors into 1 map?将两个向量展平为 1 个地图的好方法?
【发布时间】:2019-02-09 09:15:56
【问题描述】:

有没有更好的方法将 Notes 文档中的两个多值字段展平为 SSJS 中的地图集合?

到目前为止,我得出以下结论:

var vw:NotesView = database.getView("configuration");
    if(null != vw){
        var doc:NotesDocument = vw.getFirstDocument();
        if (null != doc){
            var itemname1:string = "userName";
            var itemname2:string = "inboxFile";
            if(doc.hasItem(itemname1) && doc.hasItem(itemname2)){
                var itemvalues1:java.util.Vector = doc.getItemValue(itemname1);
                var itemvalues2:java.util.Vector = doc.getItemValue(itemname2);

                if(itemvalues1.size() == itemvalues2.size()){
                    var map = new java.util.HashMap();
                    var iterator1 = itemvalues1.iterator();
                    var iterator2 = itemvalues2.iterator();                 
                }               

                while (iterator1.hasNext()) {
                    var itemvalue1 = iterator1.next();
                    var itemvalue2 = iterator2.next();
                    if ((typeof(itemvalue1)).endsWith("string")) {
                        map.put(itemvalue1.left(80), itemvalue2.left(80));                      
                    }
                }
                sessionScope.put("setupInbox",map)
            }           
        }
    }   

【问题讨论】:

  • 发现这很相似,stackoverflow.com/questions/1839668/… 看起来您的解决方案可能很简单,但您可能需要检查两个列表的长度以防它们不同。
  • 我宁愿使用 Simon Delicata 提供的链接中的解决方案。尽管该解决方案非常相似,但它不会带来额外的迭代器开销,这是不需要的,因为您的向量不会在迭代周期中被修改

标签: xpages xpages-ssjs


【解决方案1】:

如果支持 JavaScript forEach 构造,您可以使用:

     function mergeVector(keyVector, valueVector) {
        var map = new java.util.HashMap();
        keyVector.forEach(function(curKey, index) {
            if (index < valueVector.size()) {
                map.put(curKey, valueVector.get(index));
            }
        });
        return map;
     }

否则使用:

     function mergeVector(keyVector, valueVector) {
        var map = new java.util.HashMap();
        for(var index = 0; index < keyVector.size(), index++) {
            if (index < valueVector.size()) {
                map.put(keyVector.get(index), valueVector.get(index));
            }
        };
        return map;
     }

希望对你有帮助

【讨论】:

  • 非常感谢斯蒂芬!
猜你喜欢
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多