TreeMap <string,arraylist <string =“”>&gt;特定的打印/排序</string>

时间:2015-02-23 18:54:27

标签: java sorting printing treemap

我有一个查询,我希望你的意见。 我存储在一个名为trip的ArrayList()中,其中包括寄存器flightNo(String),country(String),people(int)以及另一个名为distance的HashMap(float,String),其中String是国家和浮点数是距离。我想比较两个集合(通过检查目的地),如果有相同的输出,我得到flightNo,目的地,距离,人和另一个属性(根据距离和乘客计算)。 / p>

我有一个像ArrayList(Trips)这样的输入,其中相同的flightNo可以去不同的国家

  No   Country People
 AB12  France   100
 CD23   UK      120
 AB12  Italy    80
 FR45  Italy    45
 SE56  Sweden   120 
 FR34  Norway   125
 CD23  Poland   200
 NM89  Romania  100
 KL78  Bulgaria 125

另一个输入类似于HashMap(float,String),其中float是距离,String是国家。它看起来像这样:

Country   Distance
France   900.45 miles
UK       1200.32 miles
Italy    1010.34 miles
Sweden   1500.89 miles 
Norway   140.12 miles
Poland   700.98 miles
Romania  600.21 miles   
Bulgaria 1035.23 miles

所以我想根据目的地进行检查并获得类似的输出

  No   Country People   Distance       fuelConsumption(distance * people)
 CD23   UK      120  1200.32 miles       1000 (i.e)
 AB12  Italy    80   1010.34 miles       800
 FR45  Italy    45   1010.34 miles       500 
 SE56  Sweden   120  1500.89 miles       340 
 FR34  Norway   125  140.12 miles        310
 CD23  Poland   200  700.98 miles        250 
 NM89  Romania  100  600.21 miles        100 
 KL78  Bulgaria 125  1035.23 miles        90

所以我已经到达了我将所有这些信息存储在TreeMap(String,ArrayList)中的地方,这些信息称为详细信息,其中我将国家作为关键字,并将所需的所有信息都放在此TreeMap的值中作为字符串的ArrayList。

我不知道如何以漂亮的格式输出,然后获取/打印关于燃料消耗的前三个和最后三个目的地。

这是我编写的代码,并返回TreeMap详细信息,我获取值并想以某种方式打印。

public Map<String, TreeSet<String>> getDetails()

{
    for (Float distance : destinations.keySet())

    {

        String destinations = destinations.get(distance);

        for (Journeys j : journeys) {
            String places = j.getDestination();

            if (destinations.equals(places)) {

               *//destinationsList is a TreeSet<String>*
                destinationsList = details.get(destinations);

                if (destinationsList == null) {
                    destinationsList = new TreeSet<String>();
                }

                destinationsList.add((j.getFlight() + "        "
                        + j.getCountry() + "      " + distance
                        + "miles" + "       " + j.getPeople()
                        + "         " + j.getFuelConsumption(distance))
                        + "\n");

                details.put(destinations, destinationsList);

            }

        }

    }

    return details;
}
在destinationList.add中的

我试图在输入值时给出一个很好的格式,但没有运气。而且我也不知道是否必须以另一种方式存储它们以便我解释第一个和关于燃料消耗的最后三个条目。按燃料排序,而不是根据他们按照我们这样做的方式进行分类。

非常感谢你!!

1 个答案:

答案 0 :(得分:0)

从我的角度来看,您不需要TreeMap或TreeSet。请尝试以下方法:

  1. 加入行程和距离信息(我认为这是您的旅程对象)并将每个旅程都放入ArrayList 旅程
  2. 计算每个Journey对象的油耗(应该是Journey的一个字段)
  3. 按燃料消耗排序(Collections.sort)旅程
  4. 旅程中选择第一个/最后三个条目,并将它们放入另一个ArrayList selectedJourneys
  5. 实现一个toString-Journey方法(您可以使用制表符来获得类似于表格的表示)
  6. 打印selectedJourneys(每行一行)
  7. 使用Java 8(Streaming-API)可能有所帮助。这是解决问题的可能方法,还是某些编号步骤需要解决问题?