繁体   English   中英

使用类方法在ArrayList中查找类似的整数

[英]Find similar integers inside of an ArrayList with Class Method

我需要遍历对象的ArrayList并查找对于多个对象具有相同值的变量。 如下例所示,我正在查看具有子类的ArrayList。 我想要做的就是找出房子或公寓是否与此示例代码共享相同的列表编号。 我尝试使用双循环,并使用方法(sameListingNum)增强循环,并且无法解决问题。

谢谢

// main client class
public static void main(String[] args) 
    {
      ArrayList<House> listings = new ArrayList();

      listings.add(new House(0001, 200000.00));
      listings.add(new House(0201, 200000.00));
      listings.add(new House(0001, 200000.00));
      listings.add(new House(0401, 200000.00));
      listings.add(new House(0031, 200000.00));
      listings.add(new Condo(0401, 200000.00, 4));
      listings.add(new Condo(0001, 120000.00, 3));
      listings.add(new Condo(0301, 220000.00, 2));
      listings.add(new Condo(0001, 130000.00, 3));
      listings.add(new Condo(0201, 130000.00, 3));

      for(House currentHouse: listings)
        System.out.println(currentHouse);
      for(int i=0; i<listings.size()-1; i++)
      {
        for(int j=i+1; j<listings.size(); j++)
        {

        }
      } 

// House Class
public class House 
{
  public int listingNum;
  public double price; 

  public House()
  {
    listingNum = 0; 
    price = 0.00; 
  }  
  public House(int newListingNum, double newPrice)
  {
    listingNum = newListingNum;
    price = newPrice; 
  }  
  public int getListingNum()
  {
    return listingNum;
  }  
  public double getPrice()
  {
    return listingNum; 
  }
  public String toString()
  {
    return ("Listing number: "+listingNum+", Price: "+price);
  }
  public boolean sameListingNum(Object other)
  {
    if(!(other instanceof House))
      return false; 
    else {
      House objHouse = (House)other;
      if(listingNum - objHouse.getListingNum() == 0)
      {
        System.out.println("Same listing numbers: "
        +listingNum+", "+objHouse.getListingNum());
        return true;
      }
      else 
        return false;
    }
  }
}

// Condo Class
public class Condo extends House
{
  public int connectedUnits;

  public Condo()
  {
    super();
    connectedUnits = 0; 
  }
  public Condo(int newListingNum, double newPrice, int newConUnits)
  {
    super(newListingNum, newPrice);
    connectedUnits = newConUnits;
  }

  public double getPrice()
  {
    return price;
  }
  public int getListingNum()
  {
    return listingNum;
  }
  public int getConnectedUnits()
  {
    return connectedUnits; 
  }
  public String toString()
  {
    return super.toString()+", Number of connected unints: "+connectedUnits;
  }

public boolean sameListingNum(Object other)
          {
            if(!(other instanceof House))
              return false; 
            else {
              House objHouse = (House)other;
              if(listingNum - objHouse.getListingNum() == 0)
              {
                System.out.println("Same listing numbers: "
                +listingNum+", "+objHouse.getListingNum());
                return true;
              }
              else 
                return false;
            }
        }

您可以使用List of List对其进行分组,例如Map> groups。

然后你循环上面的列表,并为每个房子/公寓你把它放在相同的列表号组。 最后,您将获得一张地图,其中每个条目的所有房屋/公寓都有相同的房源编号。

这是一个样本:

Map<Integer, List<House>> groups = new HashMap<Integer, List<House>>();
for (House house:listings) {
   List<House> group = groups.get(house.getListingNum());
   if (group == null) {
     group = new ArrayList<House>();
     groups.put(house.getListingNum(), group);
   }
   group.add(house);
}

for (Entry<Integer, List<House>> entry:groups.entrySet()) System.out.println("Listing Number "+entry.getKey()+" Houses/condos: "+entry.getValue());

其他两个答案都可以交替使用,你可以在众议院实现可比性......例如。

public class House implements Comparable<House> 

@Override
public int compareTo(final House o) {
    return listingNum - o.listingNum;
}

然后在你的主要方法内。 对Collection进行排序并检查前一行是否始终具有相同的Id。

    Collections.sort(listings);

    int previousListing = Integer.MIN_VALUE;

    for (House currentHouse : listings) {
        if (currentHouse.getListingNum() == previousListing){
            System.out.println("Duplicate for " + currentHouse.getListingNum());
        }
        previousListing = currentHouse.getListingNum();
    }

接受你的选择。

尝试这个:

foreach(House h in listings)
{
if(listings.Exists(p => p.sameListingNum(h)))
{
//do something
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM