【问题标题】:rearrange an array into a nested array in java在java中将数组重新排列为嵌套数组
【发布时间】:2021-05-03 14:03:05
【问题描述】:

我在 sql 中有一个医生姓名及其客户的表 每个医生都有多个客户 一个客户可以拜访多个医生 数组和一个简单的表格

[
{doctor="illies",client=4},
{doctor="illies",client=7},
{doctor="illies",client=1},
{doctor="houari",client=5},
{doctor="abdou",client=1},
{doctor="illies",client=2},
{doctor="abdou",client=1},
]

这些数据已经排序所以任务是教客户知道它在队列中的位置 例如 ID为1的客户在医生“illies”中排名第三 他在“阿卜杜”医生中排名第一 我不知道我是否能很好地向你解释我的一个朋友建议我 像这样将数组重新排列为嵌套数组(这个数组并不完全正确,但我有这个想法)

[doctor="abdou" => clients=[cleint1="1",client2="2" ], doctor="illies"=>clients=[...] ]

现在我只需要一个可以帮助我的项目的想法,所有这些工作都是为了显示客户的队列(客户在医生队列中的位置),非常感谢。

【问题讨论】:

    标签: java arrays sorting arraylist


    【解决方案1】:

    似乎输入数组中的每一行都可以像这样呈现为一个类:

    class DocClient {
        private String doctor;
        private int client;
    
        public String getDoctor() { return this.doctor; }
        public int getClient() { return this.client; }
    }
    

    那么<DocClient>的数组或列表不需要转换成“嵌套数组”,而是转换成以doctor为key的map,值为clients的列表:Map<String, Integer> docClients .

    可以使用收集器Collectors.groupingByCollector.mapping 使用Java Stream API 方便地构建此地图:

    List<DocClient> list = Arrays.asList(
        new DocClient("illies", 4), new DocClient("illies", 4), new DocClient("illies", 1),
        new DocClient("houari", 5), new DocClient("abdou", 1), new DocClient("illies", 2),
        new DocClient("abdou", 2)
    );
    
    Map<String, List<Integer>> map = list
            .stream()
            .collect(Collectors.groupingBy(
                DocClient::getDoctor, // use doctor as key via reference to getter 
                Collectors.mapping(
                    DocClient::getClient, // use `client` field
                    Collectors.toList()   // convert to list
                ) // List<Integer> is value in map entry
            ));
    // print the map
    // map.forEach((doc, clients) -> System.out.printf("%s -> %s%n", doc. clients));
    

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 2012-06-03
      相关资源
      最近更新 更多