我的公司要求我们使用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
替换循环答案 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();
}