我有一个String
元素列表,我希望使用FluentIterables.transform
进行转换。为了这个例子,我们说它是:
List<String> l = Arrays.asList("a", "b", "c");
现在我想为每个元素添加索引号,结果如下:
"0a", "1b", "2c"
有没有办法用Guava很好地完成这个?
答案 0 :(得分:5)
FluentIterable.from(list).transform(new Function<String, String>(){
private int ct = 0;
@Override
public String apply(String input){
return ct++ + input;
}
})
虽然这很容易,但我不一定称它为“好”,因为它是一个有状态函数,而函数通常应该是无状态的。但它运作良好。
答案 1 :(得分:3)
如果从 indices 而不是list元素开始,则可以使用无状态转换函数执行此操作。这是Java 8流的一个例子:
List<String> list = Arrays.asList("a", "b", "c");
IntStream.range(0, list.size())
.mapToObj(i -> i + list.get(i))
.forEachOrdered(System.out::println); //or .collect(Collectors.toList()), ...
您可以使用合适的索引生成器(例如ContiguousSet.create(Range.closedOpen(0, list.size()), DiscreteDomain.integers())
)对FluentIterable执行相同的操作。