使用番石榴从集合中获取属性列表进入统一列表

Get list of properties from collection Into unified list using Guava

我的公司要求我们在遍历对象集合时使用 Guava 的函数和谓词。虽然我不一定同意应该这样,但这是我公司的标准,所以请不要给我评论说它效率低下或类似的事情:)

我需要,特别是在 Java 1.7 中使用 Guava,找到一种获取对象集合并将所有内部字段放入统一列表的方法。这是我所得到的,但我无法获得内部字段:

public static final Function<Group, String> GROUP_TO_GROUP_NAME =
  new Function<Group, String>()
{
  @Override
  public String apply(Group group)
  {
    return group.getGroupName();
  }
};

public static List<String> transformToGroupNames(List<GroupCollection> groupCollections)
{
  List<Group> groups = new ArrayList<>();
  for (GroupCollection groupCollection: groupCollections)
  {
    groups.addAll(groupCollection.getGroups());
  }
  return FluentIterable.from(groups)
    .transform(GROUP_TO_GROUP_NAME)
    .filter(Predicates.notNull())
    .toList();
}

我的目标是通过 groupCollections 替换循环

要将组集合展平为单个组集合,您可以使用 FluentIterable.transformAndConcat(Function):

public static final Function<GroupCollection, List<Group>> GROUP_COLLECTIONS_TO_GROUP_COLLECTION =
        new Function<GroupCollection, List<Group>>() {
            @Override
            public List<Group> apply(GroupCollection input) {
                return input.getGroups();
            }
        };

public static final Function<Group, String> GROUP_TO_GROUP_NAME =
        new Function<Group, String>() {
            @Override
            public String apply(Group group) {
                return group.getGroupName();
            }
        };

public static List<String> transformToGroupNames(List<GroupCollection> groupCollections) {
    return FluentIterable.from(groupCollections)
            .transformAndConcat(GROUP_COLLECTIONS_TO_GROUP_COLLECTION)
            .transform(GROUP_TO_GROUP_NAME)
            .filter(Predicates.notNull())
            .toList();
}