数组转变为List集合

本文介绍了如何在Java中将int数组转换为List集合,提供了两种方法:手动逐个添加元素和使用Arrays.stream().boxed().collect()。还提供了一个处理IP地址和子网掩码的编程题目,涉及IP地址的分类和私有IP的判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

将int数组转为List集合

 int[] codeRange = {254, 252, 248, 240, 224, 192, 128, 0};
      方式一:

  List<Integer> list = new ArrayList<Integer>();
        list.add(254);
        list.add(252);
        list.add(248);
        list.add(240);
        list.add(224);
        list.add(192);
       list.add(128);
        list.add(0);

方式二:

List<Integer> list = Arrays.stream(codeRange).boxed().collect(Collectors.toList);

方式一和方式二的结果等价

对于字符串数组array转为List数组:

List<Integer> list = Arrays.stream(array).collect(Collectors.toList);

附上编程题:处理数据时,注意类型匹配。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

//私网IP范围是:
//10.0.0.0~10.255.255.255
//172.16.0.0~172.31.255.255
//192.168.0.0~192.168.255.255
//子网掩码为二进制下前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
//注意二进制下全是1或者全是0均为非法
//注意:
//1. 类似于【0.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时可以忽略
//2. 私有IP地址和A,B,C,D,E类地址是不冲突的
//输出:统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。


public class Main {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] count =new int[]{0,0,0,0,0,0,0};
    while(sc.hasNext()){
        String[] data = sc.nextLine().split("~");
        String[] ipstr = data[0].split("\\.");
        Boolean isTrue = true;
        //判断IP首字母是否为0或IP是否为空
        if(Integer.parseInt(ipstr[0])==0){
            continue;
        }else{
            for(int i=0;i<ipstr.length;i++){
                if(ipstr[i]=="" || ipstr[i].length()<=0){
                    isTrue=false;
                }
            }
        }
        //判断掩码是否合法
//        int[] codeRange = {254, 252, 248, 240, 224, 192, 128, 0};
//        List<Integer> list = new ArrayList<Integer>();
//        list.add(254);
//        list.add(252);
//        list.add(248);
//        list.add(240);
//        list.add(224);
//        list.add(192);
//        list.add(128);
//        list.add(0);
        if(isTrue){
            int[] codeRange = {254, 252, 248, 240, 224, 192, 128, 0};
            List<Integer> list = Arrays.stream(codeRange).boxed().collect(Collectors.toList());//int数组转化为list
//            List list = new ArrayList<>(codeRange.length);
//            Collections.addAll(list, codeRange);
            String[] codestr = data[1].split("\\.");
            if("255".equals(codestr[0])){
                if("255".equals(codestr[1])){
                    if("255".equals(codestr[2])){
                        if("255".equals(codestr[3])){
                            isTrue=false;
                        }else if(list.contains(Integer.parseInt(codestr[3]))){
                            isTrue=true;
                        }else{
                            isTrue=false;
                        }
                    }else if(list.contains(Integer.parseInt(codestr[2]))){
                        if(Integer.parseInt(codestr[3])==0){
                            isTrue=true;    
                        }else{
                            isTrue=false;
                        }
                    }else{
                        isTrue=false;
                    }
                }else if(list.contains(Integer.parseInt(codestr[1]))){
                    if(Integer.parseInt(codestr[2])==0 && Integer.parseInt(codestr[3])==0){
                        isTrue=true;
                    }else{
                        isTrue=false;
                    }
                }else{
                    isTrue=false;
                }
            }else if(list.contains(Integer.parseInt(codestr[0]))){
                if(Integer.parseInt(codestr[0])==0){
                    isTrue=false;
                }else{
                    if(Integer.parseInt(codestr[1])==0 && Integer.parseInt(codestr[2])==0 &&Integer.parseInt(codestr[3])==0 ){
                        isTrue=true;
                    }else{
                        isTrue=false;
                    }
                }
            }else{
                isTrue=false;
            }
        }
            
            
        
        统计A0、B1、C2、D3、E4、错误IP地址或错误掩码5、私有IP的个数6,之间以空格隔开。
        A类地址1.0.0.0~126.255.255.255;
        B类地址128.0.0.0~191.255.255.255;
        C类地址192.0.0.0~223.255.255.255;
        D类地址224.0.0.0~239.255.255.255;
        E类地址240.0.0.0~255.255.255.255
        
        if(isTrue){
            int first = Integer.parseInt(ipstr[0]);
            int second = Integer.parseInt(ipstr[1]);
            if(first>=1 && first<=126){
                count[0]++;
            }else if(first>=128 && first<=191){
                count[1]++;
            }else if(first>=192 && first<=223){
                count[2]++;
            }else if(first>=224 && first<=239){
                count[3]++;
            }else if(first>=240 && first<=255){
                count[4]++;
            }
            //私网IP范围是:
            //10.0.0.0~10.255.255.255
            //172.16.0.0~172.31.255.255
            //192.168.0.0~192.168.255.255
            if(first==192 && second==168){
                count[6]++;
            }
            if(first==172){
                if(second>=16 && second<=31){
                    count[6]++;
                }
            }
            if(first==10){
                count[6]++;
            }
        }else{
            count[5]++;
        }
        //System.out.println(count[0]+" "+count[1]+" "+count[2]+" "+count[3]+" "+count[4]+" "+count[5]+" "+count[6]);
    }
    System.out.println(count[0]+" "+count[1]+" "+count[2]+" "+count[3]+" "+count[4]+" "+count[5]+" "+count[6]);
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值