小编kan*_*ri3的帖子

查找包含至少n个与另一个键共同的元素的键,包含列表

我有一个LinkedHashMap<String, List<T>>.我正在构建Map,所以也许有更好的方法来组织所有数据.

我试图获得具有共同列表的键,每个列表中至少有2个共同元素.

例如:

Map
----------------------
| Key | Values       |
----------------------
| M1  | [A1, A3]     |
| M2  | [A1, A2, A3] |
| M3  | [A1, A2]     |
| M4  | [A2, A3]     |
----------------------
Run Code Online (Sandbox Code Playgroud)

最后,我想有这个清单: [ [M2, M3], [M2, M4], [M1, M2] ]

  • M2和M3包含A1和A2
  • M2和M4包含A2和A3
  • M1和M2包含A1和A3

我不知道如何将我的第一个条目的值与所有其他条目的值进行比较.依此类推,直到我到达地图的末尾(就像for列表的双循环一样).

我现在的解决方案(但我觉得可能有更好的方法)

List<String> keyList = new ArrayList<>(myMap.keySet());
for(int i = 0 ; i < keyList.size()-1 ; i++) {
    String keyA = keyList.get(i);
    List<T> valuesA …
Run Code Online (Sandbox Code Playgroud)

java linkedhashmap java-8

9
推荐指数
1
解决办法
133
查看次数

计算多篇文章中的关键字出现次数

我正在尝试计算已选择的不同文章中关键字的出现次数.我可以在java 7中做到这一点,但在java 8中苦苦挣扎.

结构是这样的.

关键字类

public class Keyword {

    private String word;
    private int value;
}
Run Code Online (Sandbox Code Playgroud)

文章课

public class Article {
    private Set<Keyword> keywordsList;
    private boolean selected;
}
Run Code Online (Sandbox Code Playgroud)

我如何计算我有A,B,C等的时间.关键词

Map<Keyword,Integer> occurrenceMapping = new HashMap<>();

final Set<Article> articleSetFiltered = articleSet.stream()
            .filter(a -> a.isSelected())
            .collect(Collectors.toSet());

    for(Article a : articleSetFiltered) {
        for(Keyword k : a.getKeywordsList()) {
            if(!occurrenceMapping.containsKey(k)) {
                occurrenceMapping.put(k,1);
            }
            else{
                final int occurrence = occurrenceMapping.get(k);
                occurrenceMapping.put(k,occurrence+1);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我开始做这样的事情.仍在努力,但不确定我是否朝着正确的方向前进:/如果有人能指引我朝着正确的方向前进,那就太棒了!

 Map<Keyword,Integer> occurenceMappingBis = articleSetFiltered = articleSet.stream()
            .filter(a -> a.isSelected())
            .forEach(
            article -> …
Run Code Online (Sandbox Code Playgroud)

java arrays java-8 java-stream

4
推荐指数
1
解决办法
73
查看次数

根据XSD架构验证XML并使用groovy捕获验证器预期

def validateXml(xml){

    String xsd = "src/main/ressources/fulltext-documents-v1.2.3.xsd"

    def factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
    def schema = factory.newSchema(new StreamSource(new File(xsd)))
    def validator = schema.newValidator()
    validator.validate(new StreamSource(new StringReader(xml)))
}
Run Code Online (Sandbox Code Playgroud)

这是我验证xml文档的String表示的函数.下面是另一个捕获验证程序可能引发的异常的函数

def xmlVerification(xml) {

    Node rootNode = new XmlParser().parseText(xml)
    def stringXml = XmlUtil.serialize(rootNode)

    try{
        validateXml(stringXml)
        println "no error in text"
    }catch(SAXParseException e){
        println "column number "+e.getColumnNumber()
        println "line number"+e.getLineNumber()
    }
}
Run Code Online (Sandbox Code Playgroud)

现在它只显示引发异常的列和行号(目前对我来说足够好).

现在,让我们假设我有一个至少有2个错误的文档.我希望得到这两个错误(例如在一个表中),然后对待它们.使用我的代码,它会在第一个异常引发时停止,因此我无法处理2个错误.我必须更正第一个以纠正第二个(通过第二次重新运行我的代码).

任何想法如何我可以浏览整个文档,存储所有异常并在.each {}循环中处理它们或类似的东西?

希望它足够清楚

提前致谢 !

xml validation groovy xsd exception-handling

2
推荐指数
1
解决办法
2579
查看次数