Java 8/9使用Stream获取字符出现在字符串的索引列表

时间:2021-12-27 16:16:22

需求是这样的:输入一个字符串和一个字符,返回此字符出现在字符串里的所有索引。

可以使用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),查找下一个索引