使用流来考虑所有第一个列表元素的新列表



我想将一个列表映射到另一个列表。该决定应在第一个列表的所有元素上做出。在糟糕的代码中,它的外观:

import java.lang.Math;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;

public class HelloWorld
{
  public static void main(String[] args)
  {
    MatchingClass myObject = new MatchingClass();
    System.out.println(myObject.getMatchingEnums(Arrays.asList("param1", "param3", "param2")));
    System.out.print(myObject.getMatchingEnums(Arrays.asList("param1", "param3", "param4")));
  }
}
enum TheEnums {
    elem1("param1", "param2"),
    elem2("param1", "param3");
  String[] parameters;
  TheEnums (String... parameters){
    this.parameters = parameters;
  }
  String[] getParams (){
    return parameters; 
  }
}
// you can add other public classes to this editor in any order
public class MatchingClass 
{
  public List<TheEnums> getMatchingEnums (List<String> givenParameters) {
    List<TheEnums> result = new ArrayList<>();
    for (TheEnums theEnum : TheEnums.values()){
      if (givenParameters.containsAll(Arrays.asList(theEnum.getParams()))){
            result.add (theEnum);
      }
    }
    return result;
  }
}

这可以写得更好,但是我想知道的是,如果我们可以使用Java 8流来做到这一点。

也许使用收藏家?

谢谢。

例如:

class MatchingClass {
    public List<TheEnums> getMatchingEnums(List<String> givenParameters) {
        List<TheEnums> enumsList = Arrays.asList(TheEnums.values());
        return enumsList.stream()
                .filter(e -> givenParameters.containsAll(Arrays.asList(e.getParams())))
                .collect(Collectors.toList());
    }
}

相关内容

最新更新