Java 8/9 : Can a character in a String be mapped to its indices (using streams)?

标签 java string java-8 java-stream java-9

给定一个 String schar c ,我很好奇是否存在某种产生 List<Integer> list 的方法来自 s (其中 list 内的元素表示 cs 的索引)。

一个接近但不正确的方法是:

public static List<Integer> getIndexList(String s, char c) {
    return s.chars()
            .mapToObj(i -> (char) i)
            .filter(ch -> ch == c)
            .map(s::indexOf) // Will obviously return the first index every time.
            .collect(Collectors.toList());
}

以下输入应产生以下输出:

getIndexList("Hello world!", 'l') -> [2, 3, 9]

最佳答案

可以通过 IntStream 完成

public static List<Integer> getIndexList(String s, char c) {
    return IntStream.range(0, s.length())
                    .filter(index -> s.charAt(index) == c)
                    .boxed()
                    .collect(Collectors.toList());
}

关于Java 8/9 : Can a character in a String be mapped to its indices (using streams)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48592263/

相关文章:

java - JFrame 仅在调整大小后显示内容 (Xuggler)

java - 从 httpmultipart 请求获取 xml 响应

c - 如何扫描 C 中的数组部分寻找匹配用户输入

string - Levenshtein 编辑距离和不同的编辑集

java - Comparator.comparing 使用嵌套对象的字段对列表进行排序

Java8 Stream 作为一个整体映射到一个 Function

java - 用 Java 从网页中提取 HTML

c - C语言中如何删除字符串最后一部分

java - 设计决策 - Math.java 中单独的 RandomNumberGenerator Holder 类的用途/优势是什么?

java.util.Properties.load() 问题 OWASP Top 10 2017