当前位置: 首页 > 知识库问答 >
问题:

通过元素确定路径

阙星渊
2023-03-14

我有一个类项目,它使用一个字符作为标识符。

public class Item {

    private char identifier;
    private Set<Character> predecessors;
    private Set<Character> successors;

    // Constructor, getters and setters...

}

我希望能够检索由Path类表示的路径,它包含item的简单有序列表:

public class Path {

    private List<Item> items;

    // Constructor, getters and setters 

}

为了存储和管理我的项目和路径,我使用了一个专用类。它包含两个set,其中包含每种类型。我可以使用任务的标识符检索任务。

public class SimpleClass {

    private Set<Item> items;
    private Set<Path> paths;

    // Constructor, getters and setters

    public Optional<Item> getItemById(char identifier) {
        /// ....
    }

}

    null

更新/注意:我正在寻找通过项目集构建路径

共有1个答案

长孙正卿
2023-03-14

一种快速而肮脏的递归算法。我只是创建第一个地图,以加快项目检索。看看它是否管用,试着去理解它,去改变它。

/**
 * Build all paths
 */
public void buildPaths() {
    Map<Character,Item> itemsByID=new HashMap<>();
    for (Item i:items) {
        itemsByID.put(i.getIdentifier(), i);
    }
    List<Item> starts=items.stream().filter(i->i.getPredecessors().isEmpty()).collect(Collectors.toList());
    for (Item st:starts) {
        Path p=new Path();
        p.getItems().add(st);
        buildPath(p,itemsByID);
    }
}

/**
 * Build the next step of the given path
 * @param p
 * @param itemsByID
 */
private void buildPath(Path p,Map<Character,Item> itemsByID) {
    Item last=p.getItems().get(p.getItems().size()-1);
    Set<Character> successors=last.getSuccessors();
    // no successor, path is finished, add to collection
    if (successors.isEmpty()) {
        paths.add(p);
    // one successor continue on same path
    } else if (successors.size()==1){
        p.getItems().add(itemsByID.get(successors.iterator().next()));
        buildPath(p,itemsByID);
    } else {
        // multiple successors, create a new path for each branch
        for (Character c:successors) {
            Path p1=new Path();
            p1.getItems().addAll(p.getItems());
            p1.getItems().add(itemsByID.get(c));
            buildPath(p1, itemsByID);
        }
    }
}
 类似资料:
  • 当我运行此代码时: 我收到以下错误: org.openqa.selenium.InvalidSelectorException:无法计算xpath表达式'//输入[包含(@id,'name']'要留档此错误,请访问:http://seleniumhq.org/exceptions/invalid_selector_exception.html构建信息:版本:'2.20.0',修订版:'16008'

  • 你知道为什么吗?

  • 问题内容: 所以我有一个元组 我想从“ a”中删除所有具有共同的第二个元素的元组,但其中一个(其中任何一个)除外。 对于上面的示例,我想要新的输出 换句话说,我想消除在元组第二位置被视为重复元素的元组。 我想知道实现这一目标的最有效方法,也想知道我是否可以对列表而不是对元组做同样的事情? 问题答案: 您可以从元素中创建一个 字典 ,并使用任何您希望唯一的键作为键,然后提取值。这适用于“唯一”子元素

  • 我试图通过selenium单击save按钮,但是,我得到的错误是它无法定位元素。 这是网站的html部分 这是我得到的错误: NoSuchelementException:没有这样的元素:找不到元素:{“method”:“id”,“selector”:“divflashviewermain_savepdfbuttonicon”} (会话信息:chrome=74.0.3729.169)(驱动程序信息

  • 问题内容: 以下定位技术之间有什么区别? 而且,从 性能角度来看 ,哪种方法是通过id定位元素的最快方法? 问题答案: 您的问题很难回答,肯定会给出一个结论性的答案。实际上,我很想将此问题标记为“太宽泛”,其他答案和评论也支持该问题。 以您的为例。纵观Selenium来源, 大多数 驱动程序只是获取您提供的ID,然后将其传递给有线协议: 如您所知,每个浏览器供应商都在单独的二进制文件中实现自己的有

  • 请帮助我,我正在尝试选择一个图片,这是一个链接(一个网站上的培训师) 这是我的代码: