【问题标题】:How to add element of a List of List and generate a new List如何添加列表列表的元素并生成新列表
【发布时间】:2017-10-24 12:14:23
【问题描述】:

我有一些数据存储在List<List<String>> 中,所以我使用这种方法来获取数据

private static void finalResult(List<List<String>> resultList) {
    for (List<String> listOFResults : resultList) {
        if(listOFResults.get(0).equals("v1")){
            System.out.println("Vehicle is :: "+listOFResults);         
        }
    }
}

我的输出是这样的

Vehicle is :: [v1, route1, 1.4, destination1]
Vehicle is :: [v1, route2, 2.3, destination1]
Vehicle is :: [v1, route3, 1.2, destination2]
Vehicle is :: [v1, route4, 3.4, destination2]  

我的查询是添加索引值 2 i.e 1.4,2.3,1.2,3.4 但添加必须在

`route1 + route4` = 1.4 + 3.4

添加后我想将两个列表的值存储在一个公共列表中
喜欢

 value is :: [v1,route1,destination1,route4,destination2,4.8];
 value is :: [v1,route2,destination1,route4,destination2,5.7];
 value is :: [v1,route3,destination2,route4,destination1,4.6];  

在这里,我有 3 种可能的方式到达我的目的地,在这里我正在过滤我的车辆 1。现在我的输出中有我的路线详细信息和旅行时间。我想添加 2 条路线进行比较,哪条路线可以更快地覆盖两个目的地。所以可能的方式可以是Route1+Route4、Route2+Route4和Route3+Route4

如何实现这一点。

【问题讨论】:

  • 你可以使用 addAll() 方法。另外,您可以改用 Streams 并尝试连接两个列表,然后将它们收集到一个中
  • 能否提供一些demo代码解释一下。
  • 为什么这是 List&lt;String&gt; 的实例而不是定义明确的 POJO ?这会更干净......顺便说一句,你的要求不是很清楚。你到底想做什么?
  • 为您的结果输出提供预期的完整输出。
  • @AxelH 在这里我有 3 种可能的方式到达我的目的地在这里我正在过滤我的车辆 1。现在我的输出中有我的路线详情和旅行时间。我想添加 2 条路线进行比较,哪条路线可以更快地覆盖两个目的地。所以可能的方式可以是Route1+Route4、Route2+Route4和Route3+Route4。

标签: java arraylist logic


【解决方案1】:

根据我对您问题的假设是否正确,这是一个可能的解决方案:

public static void main(String[] args) {
    List<String> a1 = Arrays.asList("v1", "route1", "1.4", "destination1");
    List<String> a2 = Arrays.asList("v1", "route2", "2.3", "destination1");
    List<String> a3 = Arrays.asList("v2", "route2", "3.0", "destinationx");
    List<String> a4 = Arrays.asList("v1", "route3", "1.2", "destination2");
    List<String> a5 = Arrays.asList("v1", "route4", "3.4", "destination2");
    List<List<String>> all = List.of(a1, a2, a3, a4, a5);
    List<String> str = all.stream().filter(l -> "v1".equals(l.get(0)))
            .map(l -> {
                double v = Double.parseDouble(l.get(2)) + Double.parseDouble(a5.get(2));
                return String.format("%s,%s,%s,%s,%s,%1.1f", l.get(0), l.get(1), l.get(3), "route4", a5.get(3), v);
            })
            .collect(Collectors.toList());
    str.forEach(System.out::println);
}

这会打印出以下内容:

v1,route1,destination1,route4,destination2,4.8
v1,route2,destination1,route4,destination2,5.7
v1,route3,destination2,route4,destination2,4.6
v1,route4,destination2,route4,destination2,6.8

这段代码有什么作用?

  1. 它过滤“v1”元素
  2. 执行计算并以您指定的格式创建字符串
  3. 将这些字符串收集到一个列表中

但老实说:最好的办法是使用与您的数据模型相对应的字段创建适当的普通 Java 对象 (POJO)。像我做的那样洗牌从来都不是最好的主意。

【讨论】:

  • 这工作.. 谢谢,你能提供一些创建 POJO 的链接吗?或者 POJO 是什么。
  • @VipulSingh:这是 Wikipedia 上 POJO 的链接:en.wikipedia.org/wiki/Plain_old_Java_object
  • 这部分是项目的一小部分,我必须找到在地图上旅行 2 个不同点所需的最短时间。所以所有这些数据都来自用户端,在这里我必须匹配和找出最佳路线。
  • 所以在这里我有时间用某辆车行驶一条路线,同样会为其他车辆行驶。所以我必须对每辆车进行排序并添加两条路线以获得总旅行时间,可以从所有人中查询最短时间。
猜你喜欢
  • 2022-10-31
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
相关资源
最近更新 更多