Java 8/9使用Stream获取字符出现在字符串的索引列表
需求是这样的:输入一个字符串和一个字符,返回此字符出现在字符串里的所有索引。
可以使用for循环迭代字符串可以实现此需求。考虑了下java8和java9的实现方案。
java 8使用IntStream的实现方案
public static List<Integer> getIndexes(String s, char c) {
return IntStream.range(0, s.length())
.filter(index -> s.charAt(index) == c)
.boxed()
.collect(Collectors.toList());
}
Java 9使用IntStream的iterate
public static List<Integer> getIndexes(String s, char c) {
return IntStream
.iterate(s.indexOf(c), index -> index >= 0, index -> s.indexOf(c, index + 1))
.boxed()
.collect(Collectors.toList());
}
iterate的方法
iterate(int seed, IntPredicate hasNext,IntUnaryOperator next)
- seed:s.indeOf(c),找到第一个字符c的索引值
- hasNext:这是一个预测函数。index->index>=0当index >= 0时才继续查找
- next:下一个操作数。index -> s.indexOf(c, index + 1),查找下一个索引