【问题标题】:TreeMap<String ,ArrayList<String>> specific printing/sortingTreeMap<String ,ArrayList<String>> 具体打印/排序
【发布时间】:2015-02-23 18:54:26
【问题描述】:

我有一个问题想听听您的意见。 我已经存储在一个名为 trips 的 ArrayList() 中,其中包括寄存器 flightNo(String) 、 country(String) 、 people(int) 和另一个在 HashMap(float,String) 中,称为距离,其中字符串是国家和浮点数是距离。我想比较两个集合(通过检查目的地),如果是相同的有一个输出,我得到了 flightNo ,destination,distance ,people 和另一个属性(从距离和乘客计算)。

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

  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

所以我已经将所有这些信息存储在一个名为 details 的 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;
}

在destinationsList.add 中,我在输入值时尝试给出一个很好的格式,但没有运气。而且我不知道我是否必须用另一种方式存储它们以获得我解释的第一个和关于燃料消耗的最后三个条目。按燃料排序,而不是现在根据我所做的国家/地区排序。

非常感谢您!

【问题讨论】:

    标签: java sorting printing treemap


    【解决方案1】:

    在我看来,您不需要 TreeMap 或 TreeSet。请尝试以下操作:

    1. 加入行程和距离的信息(我认为这是你的旅程对象)并将每个旅程放入一个ArrayList 旅程
    2. 计算每个 Journey 对象的油耗(应该是 Journey 的一个字段)
    3. 按油耗排序 (Collections.sort)旅程
    4. journeys 中选择前/后三个条目并将它们放入另一个 ArrayList selectedJourneys
    5. 实现 Journey 的 toString 方法(您可以使用制表符来获得类似表格的表示)
    6. 打印选定的旅程(一行中的每个旅程)

    使用 Java 8 (Streaming-API) 会有所帮助。这是解决您的问题的一种可能方法,还是您需要为某些编号的步骤解决问题?

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 2012-03-24
      相关资源
      最近更新 更多