【问题标题】:How get elements from an ArrayList based by multiple conditions?如何根据多个条件从 ArrayList 中获取元素?
【发布时间】:2019-07-16 01:18:15
【问题描述】:

我正在创建一个界面来管理不同周/剧院的电影票预订。

我有一个电影课:

public class Film {

  private String title;
  private Double price;
  private String ageRestriction;
  private double rating;
  private String genre;
  private String location;
  private String screenDay;
}

一个 FilmList 类,用于在 ArrayList 中创建和存储所有电影:

public class FilmList {

  private ArrayList <Film> filmArrayList;

  public FilmList (){
    this.filmArrayList = new ArrayList<>();
  }

  public void addFilm(Film films){
    this.filmArrayList.add(films);
  }

这是图形单元界面。我要做的是根据两个条件在 ArrayList 中捕获 一个元素: 从用户中选择的周和剧院,还添加了一种检查所选参数列表中是否只有一个元素的方法。这很重要,因为每个电影实例都将被调用并在 FXML 文件的标签上“设置”(并且因为我正在考虑实现一个接口以在 ArrayList 中添加电影)。

谢谢大家。

【问题讨论】:

  • 好的,如果我理解正确,您想从电影列表中获得满足两个谓词的电影吗?
  • 是的,正是!
  • 根据某些条件从ArrayList 获取内容的方法是遍历列表并查看每个项目是否符合您的条件。如果这听起来非常低效,确实是。如果您的目标是高效搜索,则可以使用更好的数据结构。
  • 凯文谢谢你的评论。效率不是首要目标,但老实说我要求一个不那么粗糙的解决方案????.
  • 这个answer 可能会有所帮助。

标签: java arrays javafx arraylist


【解决方案1】:

好的,所以在您的示例中,它将类似于以下内容:

   //try to find any movie that suits two predicates, 1st - that it's price is greater than 30( this is random number, you can put a value from your textfield here ) and 2nd - that it's title contains Spiderman ( again, put a value from your textfield title search here for your need )
   Optional<Film> movie = listOfMovies.stream().filter(i -> i.getPrice() > 30 && i.getTitle.contains("Spiderman")).findAny();
  // if any movie has been found to suits provided criterias
   if(movie.isPresent())
       {
               //print it on screen, note method get()
               //again this is just for example here, in your code,
               // you can do with this result whatever you like
               // for example show all data about that movie on screen    
               System.out.println("---->" +movie.get());
       }
      else
       {
              // if not found do nothing
              System.out.println("Nothing found...");
       }

More about Optional can be found here.

【讨论】:

  • 我使用的是 Java 1.8,但我的课程还没有涵盖 lambda 表达式!
  • 你可以使用 lambda 表达式了吗?
  • 我是。我可以认出它,但我从未使用过,我也没有那么自信。但是,如果您认为这是更好的方法,我会尝试更好地理解您的代码块。
  • 现在看一下上面提供的示例,@ArduinoMandarelli
  • 非常感谢!非常有帮助。现在我将尝试使用事件处理程序来实现它,这可能是更难的部分?
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多