我想按升序对 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/