Java如何对IP地址列表进行排序

标签 java sorting

我想按升序对 IP 地址列表进行排序,最简单的方法是什么?

例如,我在 List 中有这些 IP 地址:

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author myu
 */
public class SortListProject {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        List addressList = new ArrayList();
        addressList.add("192.168.0.5");
        addressList.add("192.168.0.1");
        addressList.add("192.168.25.1");
        addressList.add("192.168.10.21");
        addressList.add("192.168.77.1");

        System.out.println(addressList);
    }

}

我想使用以下输出对列表进行排序:

{192.168.0.1, 192.168.0.5, 192.168.10.21, 192.168.25.1, 192.168.77.1}

最佳答案

您正在使用原始类型。请不要那样做。接下来,您需要解析 String 表示以从 IP 中的四个八位字节获取 int 值(或者 192.168.100.1 将排在 192.168.2.1 之前)。您可以将自定义 Comparator 传递给 Collections.sort。假设您使用的是 Java 8+,它们可能看起来像

List<String> addressList = new ArrayList<>(Arrays.asList("192.168.0.5", // 
        "192.168.0.1", "192.168.25.1", "192.168.10.21", "192.168.77.1"));
Collections.sort(addressList, (a, b) -> {
    int[] aOct = Arrays.stream(a.split("\\.")).mapToInt(Integer::parseInt).toArray();
    int[] bOct = Arrays.stream(b.split("\\.")).mapToInt(Integer::parseInt).toArray();
    int r = 0;
    for (int i = 0; i < aOct.length && i < bOct.length; i++) {
        r = Integer.compare(aOct[i], bOct[i]);
        if (r != 0) {
            return r;
        }
    }
    return r;
});
System.out.println(addressList);

关于Java如何对IP地址列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44079260/

相关文章:

java - 如何编写数字+字符串的验证?

Java 枚举等于

java - 优先级队列的值改变后无法自动排序

java - 如何根据整数数组对对象集进行排序

python - 从给定的项目列表创建子列表

javascript - 如何用一个字符串数组(Javascript、HTML)填充 3 列

java - 其他 NaN 值是什么?

java - 我如何通知我的应用程序一个文件已从 SDCard (Android) 中删除?

java - 如何将客户端证书添加到 Spring WebClient?

c++ - 插入数组排序法