Java 筛选标签列表
我有一个要筛选的标签列表,只保留标签Java 筛选标签列表,java,Java,我有一个要筛选的标签列表,只保留标签“低”“低”“高” 我试图实现这一点: private List<Label> filterPriorityLabels(List<Label> labels) { for (ListIterator<Label> iter = labels.listIterator(); iter.hasNext();) { Label a = iter.next();
“低”“低”“高”
我试图实现这一点:
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;
}
专用列表过滤器优先级标签(列表标签)
{
for(ListIterator iter=labels.ListIterator();iter.hasNext();)
{
标签a=iter.next();
如果(a.getName()!=“低”|“最低”|“高”)
{
iter.remove();
}
}
退货标签;
}
但我不能得到有效的例子。如何修复此代码
if (! (a.getName().equals("low") || a.getName().equals("lowest") || a.getName().equals("high")))
- 在Java中,您将字符串(以及一般的对象)与
,而不是==equals()
逻辑运算符是或
,而不是|
|
- 它需要几个布尔表达式作为操作数。不是字符串
此外,方法的签名会让人认为该方法创建了另一个列表,其中包含原始列表的过滤元素,而实际上它修改了作为参数传递的列表。它应该返回void,或者创建并返回一个副本。不要将字符串与
进行比较=代码>但是!等于()
更好的解决方案是使用列表的contains()
方法
List<String> acceptableNames = Arrays.asList("low","lowest","high");
if (!acceptableNames.contains(a.getName()))
List acceptableNames=Arrays.asList(“低”、“低”、“高”);
如果(!acceptableNames.contains(a.getName()))
以下是一个完整的示例,基于:
私有静态最终列表可接受名称=
数组。asList(“低”、“低”、“高”);
专用列表过滤器三级标签(列表标签)
{
for(ListIterator iter=labels.ListIterator();iter.hasNext();)
{
最终标签a=iter.next();
如果(!acceptableNames.contains(a.getName())
{
iter.remove();
}
}
退货标签;
}
如果您使用的是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());
}
私有静态最终列表可接受名称=
数组。asList(“低”、“低”、“高”);
专用列表过滤器三级标签(列表标签)
{
返回labels.stream()
.filter(p->acceptableNames.contains(p.getName()))
.collect(Collectors.toList());
}
但是,请注意,与davidxxx的答案不同,这不会修改原始列表并返回它。相反,它保持原始列表不变并返回新列表。if(a.getName()!=“low”|“lost”|“lost”|“high”)
可能应该是if(a.getName()!=“low”&&a.getName()!=“lost”&&a.getName()!=“high”)
这段代码错得很厉害,我想知道你是否学过Java的基础知识?@domdom-循环头中;
的数量正好是正确的数字。@OusmaneMahyDiaw你是对的,很好。然后,我想再次指出对条件逻辑的绝对基本误解(|
而不是&&
等等)啊,该死的,我今天所有的评论都是垃圾。谢谢你指出我的错误@TedHoppI喜欢你个人资料上的Dijkstra引语。说得很对:)@davidxxx-谢谢。他有很多好的引语,但我认为这是他最好的引语之一。:)
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());
}