有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java集合中使用类对象及其属性

我有一个类Class1,它有3个属性(prop1prop2prop3)。 我有另一个类Class2和Hashmap hashMap1。 我正在hashMap1中使用Class1对象,并为prop1prop2prop3插入一个值

第一类

public class Class1
{
    private String Prop1;
    private String Prop2;
    private int Prop3;

    public Class1(String Prop1, String Prop2, int Prop3)
    {
        this.Prop1= Prop1;
        this.Prop2= Prop2;
        this.Prop3= Prop3;
    }
}

类别2

public class Class2
{

    public static void main(String[] args)
    {
        HashMap<String, Class1> hashMap1= new LinkedHashMap<>(); 

        hashMap1.put("01" , new Class1("Prop1a","Prop2a", 101));
        hashMap1.put("02" , new Class1("Prop1a","Prop2b", 202));
        hashMap1.put("03" , new Class1("Prop1b","Prop2a", 303));    
    }
}

我试图弄清楚,如何打印Prop1 = "Prop1a"Prop2 = "Prop2a"集合中的所有列表? 我希望这是有意义的

请让我知道是否有更好的方法可以实现这一点


共 (4) 个答案

  1. # 1 楼答案

    老式(简单,适用于所有版本的Java)使用循环

    public static void main(String[] args)
    {
      HashMap<String, Class1> hashMap1= new LinkedHashMap<String, Class1>(); 
    
        hashMap1.put("01" , new Class1("Prop1a","Prop2a", 101));
        hashMap1.put("02" , new Class1("Prop1a","Prop2b", 202));
        hashMap1.put("03" , new Class1("Prop1b","Prop2a", 303));
    
        for( Class1 c : hashMap1.values() ) {
           if( c.getProp1().equals( "Prop1a" ) || c.getProp2().equals( "Prop2a" ) )
              System.out.println( c );
        }
    }
    

    注意Class1中当然需要getter,重写的toString很有用

    class Class1
    {
        private String Prop1;
        private String Prop2;
        private int Prop3;
    
       public String getProp1() {
          return Prop1;
       }
    
       public String getProp2() {
          return Prop2;
       }
    
       public int getProp3() {
          return Prop3;
       }
    
        public Class1(String Prop1, String Prop2, int Prop3)
        {
            this.Prop1= Prop1;
            this.Prop2= Prop2;
            this.Prop3= Prop3;
        }
    
       @Override
       public String toString() {
          return "Class1{" + "Prop1=" + Prop1 + ", Prop2=" + Prop2 + ", Prop3=" + Prop3 + '}';
       }
    }
    
  2. # 2 楼答案

    如果您想获取具有特定属性的Class1列表,还可以通过流api完成:

    Predicate<Class1> prop1Predicate = class1 -> class1.getProp1().equals("Prop1a");
    Predicate<Class1> prop2Predicate = class1 -> class1.getProp2().equals("Prop2a");
    
    List<Class1> list = hashMap1.values().stream()
            .filter(prop1Predicate.or(prop2Predicate))
            .collect(Collectors.toList());  // or .forEach(System.out::println); to print (without return value)
    
  3. # 3 楼答案

    您需要迭代地图的值,选择符合条件的值并打印它们。一种方法是使用流:

    hashMap1.entrySet()
            .stream()
            .filter(c1 -> c1.getProp1().equals("Prop1a") || c1.getProp2.equals("Prop2a"))
            .forEach(c1 -> System.out.println(c1));
    

    您需要为Class1实现基本的getter和toString()

  4. # 4 楼答案

    您需要在Class1中创建getter,理想情况下还需要重写toString()方法,以便以您想要的方式打印Class1。然后你可以这样做:

     for (Map.Entry<String, Class1> entry : hashMap1.entrySet()) {
            Class1 value = entry.getValue();
            if (value.getProp1().equals("Prop1a") || value.getProp2().equals("Prop2a")) {
                 System.out.println(value);
            }
     }
    

    我没有测试代码,如果不起作用,请在评论中告诉我