我可以使用流来制作相同的代码块吗?这样更有效吗?这是我的代码:
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);
}
}