当前位置: 首页 > 知识库问答 >
问题:

如何在带有多个字符串的arraylist中搜索对象并返回OPbject?

龚征
2023-03-14

下午好,

我对编码是新手,我需要一些帮助,我已经创建了一个名为alhup的对象Arraylist。alHup包含名为“Company”的对象。

private ArrayList<Company> alHup = new ArrayList();

公司存在字符串ID、字符串Companytype、字符串年份、字符串区域、字符串类、int大小、int利润和int区域。

我已经创建了一个单独的类来定义公司。


package aaadblok1.landbouwapp.View;


public class Company {
 private String Companytype, Year, Region, Class;
 private Integer Size, Profit, Area;
 

 
public Company(){
    
}

    public String getYear() {
        return Year;
    }

    public void setYear(String Year) {
        this.Year = Year;
    }

    public Integer getSize() {
        return Size;
    }

    public void setSize(Integer Size) {
        this.Size = Size;
    }

    public Integer getArea() {
        return Area;
    }

    public void setArea(Integer Area) {
        this.Area = Area;
    }

    public Integer getProfit() {
        return totaalopbrengst;
    }

    public void setProfit(Integer Profit) {
        this.Profit = Profit;
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getClass() {
        return Class;
    }

    public void setClass(String Class) {
        this.Class = Class;
    }

    public String getCompanytype() {
        return Companytype;
    }

    public void setCompanytype(String Companytype) {
        this.Companytype = Companytype;
    }

    public String getRegion() {
        return Region;
    }

    public void setRegion(String Region) {
        this.Region = Region;
    }
}

我已经为String Companytype、String Yeary、String Region和String Class创建了4个文本我希望能够搜索Arraylist中的单个对象,该对象包含4个textfields中的值,并返回该对象的int大小、int利润和int面积。我想在3个文本字段中显示int大小,int利润和int区域。

txtCompanytype= new TextField();
txtClass= new TextField();
txtRegion= new TextField();
txtYear= new TextField();
txtProfit = new TextField();
txtSize = new TextField();
txtArea= new TextField();

我为此创建了一个名为搜索的按钮。但是我不知道按钮的lambda表达式应该是什么样子。

Search= new Button("Search");

现在我的课是这样的

package aaadblok1.landbouwapp;

import aaadblok1.landbouwapp.View.Bedrijfsgroep;
import java.util.ArrayList;
import java.util.Optional;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;

/**
 *
 * @author potat
 */
public class OverzichtScherm {
 private Label Bedrijftype33, SoKlasse, Regio, Jaar, Totaalopbrengst, Omvang, Oppervlaktecultuurgrond;
 private TextField txtBedrijfstype, txtSoKlasse, txtRegio, txtTotaalopbrengst, txtOmvang, txtOppervlaktecultuurgrond;
 private Button Zoeken, Uitloggen, nh, zh, ut, nb, ze, li, ge , ov, fl, fr, gr, dr, klasse1, klasse2, klasse3, klasse4, klasse5, klasse6, klasse7, klasse8, Groep1, Groep2, Groep3, Groep4, Groep5;
 private GridPane Scherm;
 private  ArrayList<Bedrijfsgroep> alHup = new ArrayList();
 private DataCollector dc = new DataCollector();
 
 public OverzichtScherm(Pane root){
     
 // maken van labels en tekstvelden
 
 Bedrijftype33= new Label("Bedrijfstype:");
 SoKlasse= new Label("So-Klasse:");
 Regio=new Label("Regio:");
Jaar= new Label("Jaar:");
Totaalopbrengst= new Label("Totaal Opbengst:");
Omvang= new Label("Omvang:");
Oppervlaktecultuurgrond= new Label("Oppervlakte Cultuurgrond:");
txtBedrijfstype= new TextField();
txtSoKlasse= new TextField();
txtRegio= new TextField();
txtTotaalopbrengst = new TextField();
txtOmvang = new TextField();
txtOppervlaktecultuurgrond= new TextField();



Scherm= new GridPane();
Scherm.setAlignment(Pos.CENTER);
Scherm.setHgap(10);
Scherm.setVgap(10);
Scherm.setMinSize(30, 30);
Scherm.setPadding(new Insets(10, 10, 10, 10)); 

//Het maken van de buttons

Zoeken= new Button("Zoeken");
Uitloggen= new Button("Uitloggen");
nh= new Button();
zh= new Button();
ut=new Button();
nb= new Button();
ze= new Button();
li= new Button();
ge= new Button();
ov = new Button();
fl= new Button();
fr= new Button();
gr= new Button();
dr= new Button();
klasse1 = new Button("3.000 tot 25.000 euro");
klasse2= new Button("25.000 tot 100.000 euro");
klasse3= new Button("100.000 tot 250.000 euro");
klasse4= new Button("250.000 tot 500.000 euro");
klasse5= new Button("500.000 tot 1.000.000 euro");
klasse6= new Button("1.000.000 tot 1.500.000 euro");
klasse7=new Button("1.500.000 tot 3.000.000 euro");
klasse8= new Button("meer als 3.000.000 euro");
Groep1=new Button("Akkerbouw");
Groep2=new Button("Tuinbouw");
Groep3=new Button("Blijvende Teelt");
Groep4= new Button("Graasdieren");
Groep5= new Button("Hokdieren");

// bepaalde tekstvlakken niet bewerkbaar zetten (voor gebruiksvriendelijkheid en veiligheid).

txtBedrijfstype.setEditable(false);
txtSoKlasse.setEditable(false);
txtRegio.setEditable(false);
txtTotaalopbrengst.setEditable(false);
txtOppervlaktecultuurgrond.setEditable(false);
txtOmvang.setEditable(false);

//Combobox voor de jaartallen

ComboBox jaartal = new ComboBox();
jaartal.getItems().add("2000JJ00");
 jaartal.getItems().add("2001JJ00");
 jaartal.getItems().add("2002JJ00");
 jaartal.getItems().add("2003JJ00");
 jaartal.getItems().add("2004JJ00");
 jaartal.getItems().add("2005JJ00");
 jaartal.getItems().add("2006JJ00");
 jaartal.getItems().add("2007JJ00");
 jaartal.getItems().add("2008JJ00");
 jaartal.getItems().add("2009JJ00");
 jaartal.getItems().add("20010JJ00");
 jaartal.getItems().add("2011JJ00");
 jaartal.getItems().add("2012JJ00");
 jaartal.getItems().add("2013JJ00");
 jaartal.getItems().add("2014JJ00");
 jaartal.getItems().add("2015JJ00");
 jaartal.getItems().add("2016JJ00");
 jaartal.getItems().add("2017JJ00");
 jaartal.getItems().add("2018JJ00");
 jaartal.getItems().add("2019JJ00");
 jaartal.getItems().add("2020JJ00");



//knoppen programmeren provincies zodat ze de het textvak invullen

nh.setOnAction(event -> {txtRegio.setText("PV27");});
zh.setOnAction(event -> {txtRegio.setText("PV28");});
ut.setOnAction(event -> {txtRegio.setText("pv26");});
nb.setOnAction(event -> {txtRegio.setText("PV30");});
ze.setOnAction(event -> {txtRegio.setText("PV29");});
li.setOnAction(event -> {txtRegio.setText("PV31");});
ge.setOnAction(event -> {txtRegio.setText("PV25");});
ov.setOnAction(event -> {txtRegio.setText("PV23");});
fl.setOnAction(event -> {txtRegio.setText("PV24");});
fr.setOnAction(event -> {txtRegio.setText("PV20");});
gr.setOnAction(event -> {txtRegio.setText("PV21");});
dr.setOnAction(event -> {txtRegio.setText("PV22");});

// knoppen programmeren soklasse zodat het textvak juist wordt ingevuld

klasse1.setOnAction(event -> {txtSoKlasse.setText("A029006");});
klasse2.setOnAction(event -> {txtSoKlasse.setText("A029007");});
klasse3.setOnAction(event -> {txtSoKlasse.setText("A029008");});
klasse4.setOnAction(event -> {txtSoKlasse.setText("A029009");});
klasse5.setOnAction(event -> {txtSoKlasse.setText("A029010");});
klasse6.setOnAction(event -> {txtSoKlasse.setText("A029011");});
klasse7.setOnAction(event -> {txtSoKlasse.setText("A029012");});
klasse8.setOnAction(event -> {txtSoKlasse.setText("A029013");});

// knoppen programmeren bedrijfstypen
Groep1.setOnAction(event -> {txtBedrijfstype.setText("A009481");});
Groep2.setOnAction(event -> {txtBedrijfstype.setText("A009487");});
Groep3.setOnAction(event -> {txtBedrijfstype.setText("A009497");});
Groep4.setOnAction(event -> {txtBedrijfstype.setText("A009501");});
Groep5.setOnAction(event -> {txtBedrijfstype.setText("A009510");});

// uitlogknop programmeren, met loguitboodschap
Uitloggen.setOnAction(event ->
{        Alert Loguit = new Alert (Alert.AlertType.INFORMATION);
                Loguit.setTitle("Uitloggen");
                Loguit.setHeaderText("Bedankt en tot ziens!");
                Loguit.showAndWait(); 
                root.getChildren().clear();
                        new LogIn (root);  });

//zoeken knop programmeren zodat de juiste zoektermen worden ingevuld
 ArrayList<Bedrijfsgroep> alHup = dc.getBedrijfsgroep();

Zoeken.setOnAction(event ->{

 });






// Alles op Gridpane zetten en op root


// zoekvakken

Scherm.add(Bedrijftype33, 0,3);
Scherm.add(txtBedrijfstype,1,3);
Scherm.add(SoKlasse, 0,4);
Scherm.add(txtSoKlasse, 1, 4);
Scherm.add(Regio, 0, 5);
Scherm.add(txtRegio, 1, 5);
Scherm.add(Jaar, 0, 6);
Scherm.add(jaartal,1,6);
Scherm.add(Zoeken,1,7);

//UItkomstvakken

Scherm.add(Omvang, 0,10);
Scherm.add(txtOmvang,1,10);
Scherm.add(Oppervlaktecultuurgrond, 0,11);
Scherm.add(txtOppervlaktecultuurgrond, 1, 11);
Scherm.add(Totaalopbrengst, 0,12);
Scherm.add(txtTotaalopbrengst, 1, 12);
Scherm.add(Uitloggen, 1, 13);

//provincies

Scherm.add(nh, 6,3);
Scherm.add(zh, 6,4);
Scherm.add(ut, 6,5);
Scherm.add(nb, 6,6);
Scherm.add(ze, 6,7);
Scherm.add(li, 6,8);
Scherm.add(ge, 6,9);
Scherm.add(ov, 6,10);
Scherm.add(fl, 6,11);
Scherm.add(fr, 6,12);
Scherm.add(gr, 6,13);
Scherm.add(dr, 6,14);

//soklassen

Scherm.add(klasse1, 9,3);
Scherm.add(klasse2, 9,4);
Scherm.add(klasse3, 9,5);
Scherm.add(klasse4, 9,6);
Scherm.add(klasse5, 9,7);
Scherm.add(klasse6, 9,8);
Scherm.add(klasse7, 9,9);
Scherm.add(klasse8, 9,10);

//Bedrijfstypen

Scherm.add(Groep1, 12,3);
Scherm.add(Groep2, 12,4);
Scherm.add(Groep3, 12,5);
Scherm.add(Groep4, 12,6);
Scherm.add(Groep5, 12,7);


root.getChildren().add(Scherm);


     
 }
 
 
    
}

共有1个答案

陈夜洛
2023-03-14

如果您提供完整的代码,那么给出正确的答案会更容易,但无论如何,我会使用过滤器,我的lambda将如下所示:

Optional<Company> result = alHup.stream().filter(company -> company.getCompanyType() == txtCompanytype.getText())
                .filter(company -> company.getYear() == txtYear.getText())
                .filter(company -> company.getRegion() == txtRegion.getText())
                .filter(company -> company.getCompanyClass() == txtClass.getText())
                .findFirst();
 if (result.isPresent()) {
     Company company = result.get();
 }
 类似资料:
  • 我有一个带有自定义对象的ArrayList。我想在这个ArrayList中搜索字符串。 因此,我希望有一个函数在我的ArrayList中搜索所有的“name”字符串,例如5个对象。

  • 在ElasticSearch6中,我有如下嵌套对象的数据: 我想从字段brand_name或字段title进行搜索。我想在相同的inner_hits中返回所有结果。 例如:如果我将搜索字符串输入为“xyz”,它应该返回两个brands对象和相应的product对象。如果我将搜索字符串输入为“test”,它应该只返回第一个品牌数组,只有第一个产品对象。 我怎么才能做到这一点。有什么想法吗? 我尝试使

  • 我试图将元素添加到中,我使用下面的代码,但它显示语法错误。有人能帮我吗?

  • 我有一个使用函数的string参数并传递给返回最长单词的函数的代码。 我想知道是否可以使用,然后使用索引访问每个字母表,这样我就可以知道字符串中有多少个单词,然后比较它们,这样我就可以返回最长的单词。 我是这样开始的。它与典型数组很好地工作,但典型数组需要预定义的大小。

  • 我还没有为索引创建任何显式设置。谢了。

  • 我正在写一个程序来跟踪学校的班级和学生。我有学校、教室和学生用品。学校包含教室对象的ArrayList,每个教室包含学生对象的ArrayList。 我试图在学校类中编写一个方法,使用字符串名称和字符串classroomName作为参数来删除学生。 这就是我到目前为止所做的: 我认为这不起作用,因为学生对象的ArrayList是在课堂上声明的。 是否有一种方法可以通过对象ArrayList搜索使用非