使用Lambda和forEach在Set中查找Object并触发布尔值

Nat*_*H06 1 java foreach lambda java-8

说我有这门课

    public class MovieCharacter {

    private String name;

    public String getName() { return name ; }
    public String setName(String name) { this.name = name; }
    }
Run Code Online (Sandbox Code Playgroud)

我正在运行测试并有一个Set,我想使用Lambda来梳理每个对象,看它是否包含Name所需的字符串.如果找到名称,则布尔值跳转到"true".找到它之后,我不希望布尔值再次改变.

Set<MovieCharacter> mySet // assume this Set has previously been created and 
                     // contains 1,000's of MovieCharacter

boolean hasName = false;
mySet.forEach( i -> i.getName().equals("Darth Vader")) // add here?
assertTrue(hasName);
Run Code Online (Sandbox Code Playgroud)

我知道我很接近,但是如何完成lambda线的关闭,以便如果该组包含一个MovieCharacter,其中.getName()返回"Darth Vader",则布尔值将被设置为true?但是,如果我正在检查的项目没有,它只是继续前进?

谢谢!

Mur*_*nik 5

您描述的行为正是该anyMatch方法的设计目标:

boolean hasName = mySet.stream().anyMatch(c -> c.getName().equals("Darth Vader"));
Run Code Online (Sandbox Code Playgroud)

  • 或者(IMHO funkier)没有lambda的`mySet.stream().map(Character :: getName).anyMatch("Darth Vader":: equals);` (5认同)