Java 8 Java 8-嵌套在循环中
因此,我有一个列表,对于列表中的每个项目,我必须根据每个列表元素“做点什么” 该列表由代码组成,共有5个代码。该列表可能包含任何或所有代码 到目前为止,我已经使用了forEach,并在其中编写了if条件,如下所示-Java 8 Java 8-嵌套在循环中,java-8,java-stream,Java 8,Java Stream,因此,我有一个列表,对于列表中的每个项目,我必须根据每个列表元素“做点什么” 该列表由代码组成,共有5个代码。该列表可能包含任何或所有代码 到目前为止,我已经使用了forEach,并在其中编写了if条件,如下所示- List<Category> categories = getCategories(); categories.stream().forEach(category -> { if(category.equals(Category.A)) {
List<Category> categories = getCategories();
categories.stream().forEach(category -> {
if(category.equals(Category.A)) {
// do something
} else if(category.equals(Category.B)) {
// do something
} else if(category.equals(Category.C)) {
// do something
} else if(category.equals(Category.D)) {
// do something
} else if(category.equals(Category.E)) {
// do something
}
});
List categories=getCategories();
categories.stream().forEach(类别->{
if(类别等于(类别A)){
//做点什么
}else if(类别等于(类别B)){
//做点什么
}else if(类别等于(类别C)){
//做点什么
}else if(类别等于(类别D)){
//做点什么
}else if(类别等于(类别E)){
//做点什么
}
});
我正在考虑重构这个。有人能看看这能做得多好吗?我唯一要改进的是使用switch语句:
switch(category){
case Category.A:
// do Something
break;
}
正如luk2302所提到的,这仅在类别为枚举时有效。首先,不要使用多行lambda并创建新方法(带开关): 然后在lambda中使用它:
getCategories()
.stream()
.forEach(category -> doSomethingBasedOnCategory(category);
另一种方法是创建预先填充键(将是Category.X)和值(将是可以使用的函数)的静态映射。您可以将
doSomething
方法添加到Category
类中,只需在.forEach
中调用它
例如:
public class Category {
// any other methods/variable/constructors
public void doSomething() {
//do something
}
}
然后你可以这样称呼它:
categories.stream().forEach(Category::doSomething);
如果
//doSomething
没有常见的行为,您可以将If部分移动到doSomething
方法中。您可以将//doSomething
放在每个类别都覆盖的方法void doSomething()
中,然后简单地编写Category.doSomething()
。创建一个loopkup表。有关信息,请参阅。什么样的比较是category.equals(category.A)
?@luk2302可能会写一个答案?这里也不需要创建流。集合接口有一个forEach方法如果Category
只是一个普通类,而不是enum!?我想那就行不通了。作者并没有提供这方面的信息。值得一试。Category是一个枚举,因此这将起作用。我打算使用嵌套的if或开关,但我问这个问题的原因是为了看看是否有可能使用lambda函数来实现这一点。也可以使用方法引用this::doSomethingBadeOnCategory
Category是一个枚举。我可以在enum类中编写登录名,但我希望保持逻辑分离。如果它是一个类,那么这肯定是我的实现。谢谢
categories.stream().forEach(Category::doSomething);