【问题标题】:How to loop through a byte array in Java 8?如何在 Java 8 中循环遍历字节数组?
【发布时间】:2019-12-19 22:30:51
【问题描述】:

我想转换以下代码以使用 Lambda 和 Streams 和/或任何其他 Java 8 功能。

我是 Java 8 的新手,并尝试将以下代码转换为 Java 8,但找不到任何适合我的场景的函数,如“forEach”。

    private String getMacAddress() {
    InetAddress ip;
    try {
        ip = InetAddress.getLocalHost();
        logger.log(LogLevel.LEVEL_INFO,"Current IP address : " + ip.getHostAddress());
        NetworkInterface network = NetworkInterface.getByInetAddress(ip);
        byte[] mac = network.getHardwareAddress();
        logger.log(LogLevel.LEVEL_INFO,"Current MAC address : ");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < mac.length; i++) {
            sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
        }
        return sb.toString();
    } catch (UnknownHostException e) {
        logger.log(LogLevel.LEVEL_ERROR,e.getMessage());
    } catch (SocketException e){
        logger.log(LogLevel.LEVEL_ERROR,e.getMessage());
    }
}

【问题讨论】:

    标签: java arrays loops byte


    【解决方案1】:

    将字节数组转换为整数流。 从那时起,您可以使用流函数将它们映射到正确的格式并加入它们。

     ByteArrayInputStream inputStream = new ByteArrayInputStream(mac);
     IntStream intStream = IntStream.generate(inputStream::read)
                                    .limit(inputStream.available());
     String result = intStream .mapToObj(b -> { return String.format("%02X",(byte)b);} )
                               .collect(Collectors.joining("-"));
    

    【讨论】:

      【解决方案2】:

      如果你想在 java 中使用流,你首先必须调用它。集合有一个.stream() 函数,对于数组,您可以使用Arrays.stream(mac) 的数组库。

      这允许您使用典型的流函数,例如 forEachmapfilter

      对于您的特定情况,我会使用映射(将字节映射到格式化字符串),然后将它们连接起来:

      Arrays
       .stream(mac)
       .map(e -> String.format("%02X", e))
       .collect(Collectors.joining("-");
      

      注意,如果你想获取数据,java Streams 必须由所谓的收集器收集。

      编辑:另请注意,Arrays.stream 接受类型为 T[] 的参数,因此原始类型数组将不起作用...

      【讨论】:

        猜你喜欢
        • 2012-03-25
        • 2016-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        相关资源
        最近更新 更多