Java 从集合中获取项目的最佳方式是什么<;CustomObject>;进入其属性的列表

Java 从集合中获取项目的最佳方式是什么<;CustomObject>;进入其属性的列表,java,lambda,collections,java-8,Java,Lambda,Collections,Java 8,我有一个关于在集合中查找某些项目的问题,例如集合 给定一个类: private class User{ Set<String> names = new HashSet<>(); User(Set<String> name){ this.names = name; } public Set<String> getNames() { return names; } } 私有类

我有一个关于在
集合
中查找某些项目的问题,例如
集合

给定一个类:

private class User{
    Set<String> names = new HashSet<>();

    User(Set<String> name){
        this.names = name;
    }

    public Set<String> getNames() {
        return names;
    }
}
私有类用户{
Set name=新的HashSet();
用户(设置名称){
this.names=名称;
}
公共集getNames(){
返回姓名;
}
}
该代码:

Set<String> firstSetInside = new HashSet<>();
firstSetInside.add("someName1");
firstSetInside.add("someName2");

Set<String> secondSetInside = new HashSet<>();
secondSetInside.add("someName1");
secondSetInside.add("someName2");

User user = new User(firstSetInside);
User user2 = new User(secondSetInside);

Set<User> userSet = new HashSet<>();
userSet.add(user);
userSet.add(user2);
Set firstSetInside=new HashSet();
添加(“someName1”);
添加(“someName2”);
Set secondSetInside=new HashSet();
secondSetInside.add(“someName1”);
secondSetInside.add(“someName2”);
用户用户=新用户(firstSetInside);
用户user2=新用户(secondSetInside);
Set userSet=newhashset();
添加(用户);
添加(user2);
如何将所有名称
“someNameX”
正确地放到一个列表中


我知道我应该使用lambdas,但如何正确使用它?

要在
用户集中从所有
用户
获取所有姓名的具体列表,您可以使用:

List<String> allNames = new ArrayList<>();
userSet.stream().map(User::getNames).forEach(allNames::addAll);

请详细说明你的目标是什么。代码中不清楚。“如何将所有名称“someName2”正确地放入一个列表”您是指获取其名称集中包含“someName2”的所有用户?我相信问题在于如何将所有名称“someNameX”正确放入一个列表“因为在代码中添加了类似的命名约定。如果这就是答案被否决的原因,我仍然会等待OP更新。是的@nullpointer,问题应该像你写的那样。您的回答是正确的,非常感谢!@Hugo@Joe C@shmosel@Eugene@Sotirios Delimanolis请任何一位主持人陈述问题中尚不清楚的地方。你在对OP试图做的事情做出未经证实的假设。您应该使用
collect()
而不是
forEach()
collect()
将适用于并行流,是生成聚合结果的更传统的方法。@nullpointer,使用collect时不需要对lambda之外的列表进行变异。不过,只要你知道自己在做什么,我觉得这不足以成为否决的理由。很好,否决权转移到了问题上
List<String> allNames = userSet.stream()
                               .flatMap(user -> user.getNames().stream())
                               .collect(Collectors.toList());