从集合中获取属性列表使用Guava获取统一列表

时间:2016-03-03 16:41:29

标签: java-7 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

替换循环

1 个答案:

答案 0 :(得分:1)

要将群组集合展平为单个群组,您可以使用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();
}