做一些如果列表中包含

问题描述:

的两个对象我有一个包含所有实现相同的接口(ICommand的)不同的命令列表。这些命令每个类都包含有关特定命令应该执行的操作的信息。做一些如果列表中包含

我希望能够,如果他们一起出现,告诉如果列表中包含两个spesific命令,并做一些事情。

例如:

List<ICommand> commandList = getCommandList(); // not important how the list is made 

伪正在添加的代码了:

if (commandList contains HelpCommand.class && WriteHelpToFileCommand.class) 

then do something (write the help to a file) 

else do something else (print the help to console) 

有人能指出我在正确的方向?

您可以使用流API来检查这个。

if(commandList.stream().anyMatch(e -> HelpCommand.class.isInstance(e)) && commandList.stream().anyMatch(e -> WriteHelpToFileCommand.class.isInstance(e))) { 
    // do something 
} 
+1

我通过改变一些系统设计完成了完全不同的事情。 Java 8流是完美的搭配。谢谢! –

使用“的instanceof”操作符来检查,如果你的列表元素都属于HelpCommand和/或WriteHelpToFileCommand的。

它很好地描述here

+0

我想检查此无需经过整个列表循环。在这种情况下,我必须遍历列表两次:第一次检查列表是否包含命令,另一次是实际运行命令。 –