我可以使用流Java 8实现这一点吗



我可以使用流来制作相同的代码块吗?这样更有效吗?这是我的代码:

public class Indexer {
public static List<Integer> getIndexes(String word, char letter) {
List<Integer> wordIndexes = new ArrayList<>();
if (word.indexOf(letter) >= 0) {
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == letter) {
wordIndexes.add(i);
}
}
}
return wordIndexes;
}
}

使用IntStream可以实现:

List<Integer> result = IntStream.range(0, word.length())
.filter(i -> String.valueOf(word.charAt(i)).equals(letter))
.boxed()
.collect(Collectors.toList());

正如@Locke所提到的,因为这里正在处理字符串,char乘以char,将相等性检查的两个操作数转换为char更合适。这可以通过将字母定义为char letter = '?';来实现,然后filter子句将类似于:

.filter(i -> word.charAt(i) == letter)

至于第二个问题("这样更有效吗?"(,我还想指出,尽管流可能更可读,但普通的旧for循环很可能具有最佳性能。

List<Integer> wordIndexes = new ArrayList<>();
String word = "ajborefbla";
char letter = 'b';
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == letter) {
wordIndexes.add(i);
}
}

相关内容

最新更新