簡體   English   中英

錯誤結果在Java中的Collectors.groupingBy

[英]wrong result Collectors.groupingBy in java

我有file.txt,我想通過ip分組數據,我正在使用Collectors.groupingBy

文件數據

 333.000.000,Newyork,50 200.000.000,china,200 333.000.000,brazil,150 444.000.000,japon,40 200.000.000,icland,400 

我使用Collectors.groupingBy對數據進行分組,因此我需要顯示以下結果:

333.000.000=[Newyork,brazil]
200.000.000=[china,icland]
444.000.000=[japon]

探針顯示如下結果:

333.000.000=[class_ip@5b6f7412,class_ip@8b6f7412]
200.000.000=[class_ip@312b1dae,class_ip@6b7f7412]
444.000.000=[class_ip@7530d0]

我的密碼

class class_ip{
    private String ip;
    private String title;
    public class_ip(String ip,String title) {
        this.ip = ip;        
        this.title = title;
    }
    public String getIP() {return ip;}
    public String getTitle() {return title;}

    public void setTitle(String title) { this.title = title;}
    public void setIP(String ip) { this.ip = ip;}

    public String getAll() {
        return ip+","+title;
    }
} 

     List<class_ip> array_ip = new ArrayList<>();

    // read data from file
    while ((strLine = br.readLine()) != null)   {
                array_ip.add(new class_ip(ip,title));
    }

   Map<String,List<class_ip>> groupByIP = new HashMap<>();
   groupByIP =array_ip.stream().collect(Collectors.groupingBy(class_ip::getIP)); 

   System.out.println(groupByIP);

class_ip@312b1dae由默認的Object#toString()替換,您需要在class_ip覆蓋它,例如:

@Override
public String toString() {
    return getTitle();
}

如果要顯示標題而不是class_ip實例,請使用Collectors.mapping並生成Map<String,List<String>>

Map<String,List<String>> groupByIP = 
    array_ip.stream()
            .collect(Collectors.groupingBy(class_ip::getIP,
                                           Collectors.mapping(class_ip::getTitle,
                                                              Collectors.toList())));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM