关于在流中使用Java8foreach循环移至下一项和java中流的使用的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于c#–我什么时候才能在原生foreach循环中使用List.ForE
关于在流中使用 Java 8 foreach 循环移至下一项和java中流的使用的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于c# – 我什么时候才能在原生foreach循环中使用List.ForEach?、For 循环 - 查找现有匹配项并移至下一种匹配项、Foreach 循环到流中、For循环到Java 8 Stream forEach()等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 在流中使用 Java 8 foreach 循环移至下一项(java中流的使用)
- c# – 我什么时候才能在原生foreach循环中使用List.ForEach?
- For 循环 - 查找现有匹配项并移至下一种匹配项
- Foreach 循环到流中
- For循环到Java 8 Stream forEach()
在流中使用 Java 8 foreach 循环移至下一项(java中流的使用)
我对 Java 8 foreach 流尝试移动到循环中的下一个项目时遇到问题。我不能像
一样设置命令continue;
,只能return;
工作,但在这种情况下你会退出循环。我需要继续循环中的下一个项目。我怎样才能做到这一点?
示例(不工作):
try(Stream<String> lines = Files.lines(path, StandardCharsets.ISO_8859_1)){ filteredLines = lines.filter(...).foreach(line -> { ... if(...) continue; // this command doesn''t working here });}
示例(工作):
try(Stream<String> lines = Files.lines(path, StandardCharsets.ISO_8859_1)){ filteredLines = lines.filter(...).collect(Collectors.toList());}for(String filteredLine : filteredLines){ ... if(...) continue; // it''s working!}
答案1
小编典典使用return;
会很好。它不会阻止完整循环的完成。它只会停止执行forEach
循环的当前迭代。
试试下面的小程序:
public static void main(String[] args) { ArrayList<String> stringList = new ArrayList<>(); stringList.add("a"); stringList.add("b"); stringList.add("c"); stringList.stream().forEach(str -> { if (str.equals("b")) return; // only skips this iteration. System.out.println(str); });}
输出:
一个
_
注意迭代return;
是如何执行的b
,但是c
在接下来的迭代中打印就好了。
为什么这行得通?
这种行为起初看起来不直观的原因是因为我们习惯了return
中断整个方法执行的语句。所以在这种情况下,我们期望main
方法执行作为一个整体被停止。
但是,需要理解的是一个lambda表达式,比如:
str -> { if (str.equals("b")) return; System.out.println(str);}
…确实需要将其视为自己独特的“方法”,与main
方法完全分开,尽管它位于其中很方便。所以实际上,该return
语句只会停止 lambda
表达式的执行。
需要理解的第二件事是:
stringList.stream().forEach()
…实际上只是一个普通的循环,它为每次迭代执行 lambda 表达式。
考虑到这两点,上面的代码可以用以下等效方式重写(仅用于教育目的):
public static void main(String[] args) { ArrayList<String> stringList = new ArrayList<>(); stringList.add("a"); stringList.add("b"); stringList.add("c"); for(String s : stringList) { lambdaExpressionEquivalent(s); }}private static void lambdaExpressionEquivalent(String str) { if (str.equals("b")) { return; } System.out.println(str);}
使用这种“不那么神奇”的代码等效项,return
语句的范围变得更加明显。
c# – 我什么时候才能在原生foreach循环中使用List.ForEach?
Matthew Podwysocki @ CodeBetter.com写了一篇关于anti-for campaign的有趣文章.这让我想到了循环试图解决的问题.在本文中,Matthew认为显式循环结构会让你思考“如何”而不是“什么”.
使用一个优于另一个(如果有的话)有什么好的理由?
解决方法
list.ForEach(action);
比…更简单
foreach (Item item in list) { action(item); }
For 循环 - 查找现有匹配项并移至下一种匹配项
如何解决For 循环 - 查找现有匹配项并移至下一种匹配项?
嗨,我可以帮助我为我正在构建的函数创建逻辑。
背景:我想推荐3款与当前车型匹配的车辆。问题是,有时只有 1 或 2 种其他车辆类型与现有车辆类型匹配。在这种情况下,我想运行一个循环,抓取与当前类型匹配的两辆车,然后抓取不匹配的最高价格的车辆。
如何告诉我的 for 循环,当它遇到所有匹配的车辆类型时,移动到下一个车辆类型并获取最昂贵的?
var currentType = "SUV";
var myArray = [
0: {index: 8,type: "SUV",value: 932.2}
1: {index: 6,type: "Sedan",value: 749.12}
2: {index: 7,value: 641.3}
3: {index: 5,value: 621.24}
4: {index: 9,value: 591.14}
5: {index: 10,value: 568.57}
6: {index: 2,value: 420.61}
7: {index: 4,value: 415.6}
8: {index: 3,value: 415.6}
9: {index: 1,value: 410.58}
10: {index: 0,value: 410.58}
]
for(i=0; i<myArray.length''i++){
if(myArray[i].type === currentType){
//grab those vehicles and do X
}else{
//grab the most expensive vehicle of some other type
}
}
提前致谢!
解决方法
这是一种方法 - 过滤匹配类型的列表,然后(如果需要)从其余部分反向过滤、排序和切片您需要的内容。
const myArray = [
{index: 8,type: "SUV",value: 932.2},{index: 6,type: "Sedan",value: 749.12},{index: 7,value: 641.3},{index: 5,value: 621.24},{index: 9,value: 591.14},{index: 10,value: 568.57},{index: 2,value: 420.61},{index: 4,value: 415.6},{index: 3,{index: 1,value: 410.58},{index: 0,value: 410.58}].sort((a,b) => a.value > b.value);
const getMatch = type => {
let matches = myArray.filter(e => e.type === type);
if (matches.length < 3) matches = matches.concat(myArray.filter(e => e.type !== type).slice(0,3 - matches.length))
return matches
}
console.log(getMatch(''SUV''))
这可能不是最有效的方法,但我相信它非常易读。它也没有使用循环,但如果这是一个要求,我相信读者可以成功翻译。
我还从示例中假设 myArray
默认按成本排序。
var onlyType = myArray.filter(x => x.type == currentType) //filter by type
if(onlyType.length > 3)
onlyType.length = 3 //truncate
else if(onlyType.length < 3)
onlyType = onlyType.concat(myArray.slice(0,3 - onlyType.length)) //add the missing
Foreach 循环到流中
虽然我没有得到确切的问题陈述,但您可以尝试这种可能正在寻找的嵌套 foreach 循环。 希望能帮到你。
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
List<PickOrder> pickedOrders = Arrays.asList(
new PickOrder("pc1",1000),new PickOrder("pc2",2000),new PickOrder("pc3",3000),new PickOrder("pc4",4000),new PickOrder("pc5",5000)
);
List<PickOrder> pickOrders = Arrays.asList(
new PickOrder("pc6",6000),new PickOrder("pc7",7000),new PickOrder("pc8",8000)
);
Map<String,Integer> removedProducts = new HashMap<>();
removedProducts.put("pc1",1000);
removedProducts.put("pc2",2000);
removedProducts.put("pc3",3000);
pickOrders.forEach( pickOrder -> removedProducts.keySet().forEach(rp -> {
if(pickOrder.getProductCode().equals(rp)) {
//pickOrder.calcReplenishmentsNeeded(quantityOnHand);
/*if (error) {
System.out.println("Recalculating: " + pickOrder);
}*/
}
}));
}
PickOrder.java
public class PickOrder {
private String productCode;
private int quantity;
public PickOrder(String productCode,int quantity) {
this.productCode = productCode;
this.quantity = quantity;
}
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
谢谢 格达尔
For循环到Java 8 Stream forEach()
我有一个for循环的列表,用于检查db中是否存在索引值.
如果任何值不存在,它会立即返回false.
public boolean exists(List<String> keys) { for(String key: keys) { boolean exists = service.existsByKey(key); if(!exists) return false; } return true; }
我试图将它改为java 8 foreach,但它没有按预期工作.
keys.stream().forEach(k -> { boolean exists = service.existsByKey(k); if(!exists) return false; });
我错过了什么吗?为什么不进入forEach()中的(!exists)staetment?
解决方法
尝试使用
boolean exists = key.stream().allMatch(k -> service.existsByKey(k));
关于在流中使用 Java 8 foreach 循环移至下一项和java中流的使用的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于c# – 我什么时候才能在原生foreach循环中使用List.ForEach?、For 循环 - 查找现有匹配项并移至下一种匹配项、Foreach 循环到流中、For循环到Java 8 Stream forEach()等相关知识的信息别忘了在本站进行查找喔。
本文标签: