Java 8过滤自定义类属性

时间:2018-11-29 16:24:52

标签: java selenium arraylist

我整个上午都在浏览SO页面,试图找出解决我的问题的最佳方法:

对ArrayList进行排序的最有效方法是,将ArrayList中的名称与我从WebElement中提取的名称匹配。我没有Java的经验,并且想知道使用HashTables是否更有意义,但是我无法找到一个易于理解的答案来说明如何将其与每个索引使用多个值:

我的自定义类:

public class KnowledgePermission {
    public String name;
    public String htmlType;
    public Boolean isAllowed;


    public KnowledgePermission(String name, String htmlType, Boolean isAllowed) {
        this.name = name;
        this.htmlType = htmlType;
        this.isAllowed = isAllowed;
    }

    public String getName() {
        return name;
    }

    public String getHtmlType() {
        return htmlType;
    }

    public Boolean getIsAllowed() {
        return isAllowed;
    }

    @Override
    public boolean equals(Object obj) {
        boolean result = false;
        if(obj instanceof KnowledgePermission) {
            KnowledgePermission otherPermission = (KnowledgePermission) obj;
            result = (this.name == otherPermission.name);
        }
        return result;
    }

    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + name.hashCode();
        result = 31 * result + htmlType.hashCode();
        result = 31 * result + isAllowed.hashCode();
        return result;
    }
}

我能够使用Java 8,因此我研究了过滤器,但尚未成功。

这是我使用班级类型创建列表后的摘录。

我想做的是获取一些浏览器页面项的XPath,通过Selenium的WebDriver API获得其名称,对于我知道应该在权限列表中匹配的一项,请访问其他两个属性之一- htmlType或isAllowed-并根据其继续逻辑。

List<KnowledgePermission> permissionList = new ArrayList<KnowledgePermission>();

permissionList.add(new KnowledgePermission("checkbox1sName", "checkbox", true ));
        permissionList.add(new KnowledgePermission("checkbox2sName", "checkbox", true ));

List<WebElement> checkboxes = driver.findElements(By.xpath("//*someXpathinfoHere//input[@type='checkbox']"));

        // check the value of each checkbox and display
        for(WebElement item : checkboxes) {
            String elname = item.getAttribute("name");
            Boolean hasBeenSelected = item.isSelected();

            // find the permission in the list
            System.out.println("filtering permissions list");
            List<KnowledgePermission> currentPermission = permissionList.stream().filter(permission -> elname.equals(permission)).collect(Collectors.toList());
            System.out.println(currentPermission);
}

循环的每次迭代输出的所有内容是:

filtering permissions list
[]

所以我猜我在这里不正确理解过滤。 任何帮助,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

.filter(permission -> elname.equals(permission.getName()))

...就是您要做的一切

如果elname可以为null,则将顺序更改为

.filter(permission -> permission.getName().equals(elname))

因为instance.equals(null)返回false,而不是NullPointerException