过滤标签列表

彼得·彭佐夫

我有一个标签列表,我想过滤并只留下标签 "low" "lowest" "high"

我试图实现这一点:

private List<Label> filterPriorityLabels(List<Label> labels)
    {
        for (ListIterator<Label> iter = labels.listIterator(); iter.hasNext();)
        {
            Label a = iter.next();
            if (a.getName() != "low" | "lowest" | "high")
            {
                iter.remove();
            }
        }

        return labels;
    }

但我无法得到工作示例。我该如何修复此代码?

泰德·霍普

这是一个基于@davidxxx 回答的完整示例

private static final List<String> acceptableNames =
    Arrays.asList("low", "lowest", "high");

private List<Label> filterPriorityLabels(List<Label> labels)
{
    for (ListIterator<Label> iter = labels.listIterator(); iter.hasNext();)
    {
        final Label a = iter.next();
        if (!acceptableNames.contains(a.getName())
        {
            iter.remove();
        }
    }

    return labels;
}

如果您使用的是 Java 8,那么使用流有更好的方法:

private static final List<String> acceptableNames =
    Arrays.asList("low", "lowest", "high");

private List<Label> filterPriorityLabels(List<Label> labels)
{
    return labels.stream()
                 .filter( p -> acceptableNames.contains(p.getName()) )
                 .collect(Collectors.toList());
}

但是请注意,与 davidxxx 的回答不同,这不会修改原始列表并返回它。相反,它保持原始列表不变并返回一个新列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章