gpt4 book ai didi

java 8 stream finde MIN/MAX 限制

转载 作者:行者123 更新时间:2023-12-04 20:15:02 25 4
gpt4 key购买 nike

例如,有一段代码可以从有限数量的元素中找到最小值:

public int min(String s) {
return s.chars().map(this::mapToFactor).min().getAsInt();
}

private int mapToFactor(int ch) {
switch(ch) {
case 'A': return 1;
case 'C': return 2;
case 'G': return 3;
case 'T': return 4;
default: return Integer.MAX_VALUE;
}
}

总共只存在 5 个数:1,2,3,4,Integer.MAX_VALUE。当我们遇到 1 时,可以跳过 future 的迭代并返回结果。

public int min(String s) {      
int min = Integer.MAX_VALUE;
for (Character ch : s.toCharArray()) {
int current = mapToFactor(ch);
if(current == 1) {
//How I can implement this in Java 8 stream style?
return 1;
}
if (current < min) {
min = current;
}
return min;
}
}

因此,如果我们的 String 会非常大,那么我们可以通过使用 Java 8 流而不是 Java 7 样式来显着降低性能,如果找到 1 个则跳过迭代。

能否请您解释一下如何以 Java 8 流样式编写上面的 Java 7 代码?

最佳答案

下面的解决方案使用了 Java 9 中引入的takeWhile 方法。尽管如此,代码仍然是 Java 8 流样式。

public int min(String s) {
IntSummaryStatistics statistics = s.chars().map(this::mapToFactor)
.takeWhile(i -> i != 1).summaryStatistics();
int index = (int)statistics.getCount();
return (index < s.length() && s.charAt(index) == 'A') ? 1 : statistics.getMin();
}

关于java 8 stream finde MIN/MAX 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40417944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com