把数组封装到Set集合
现有两个数组如下,需要分别将其中的元素封装到一个Set中.
String[] stringArray = new String[]{"1","2","3","4","5","6","7"};
int[] intArray = new int[]{1, 2, 3, 4, 5, 6, 7};
对于stringArray, 可使用如下方法:
Set<String> stringSet = new HashSet<>(Arrays.asList(stringArray));
//或者
Set<T> stringSet = new HashSet<T>();
Collections.addAll(stringSet, stringArray);
但对于intArray这种基本类型数组, 因为存在类型转换问题, 上面的方法会失效. 转出来的结果就是一个Set<int[]>集合. 为了正确的处理基本类型数组, 在JDK1.8以前需要写一个循环来处理.
Set<Integer> intSet = new HashSet<>();
for (int i : intArray) {
intSet.add(i);
}
在JDK1.8, 引入了流处理. 代码就变成了这样:
Set<String> stringSet = Arrays.stream(stringArray).collect(Collectors.toSet());
Set<Integer> intSet = Arrays.stream(intArray).boxed().collect(Collectors.toSet());
注意 在处理intArray时, 调用了boxed方法来包装基本类型的元素.
byte数组转换成16进制字符串
byte[] bytes = {-1, 0, 1, 2, 3 };
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X ", b));
}
System.out.println(sb.toString());
// prints "FF 00 01 02 03 "
java.util.Formatter 语法
- %[flags][width]conversion
- Flag '0' - The result will be zero-padded
- Width 2
- Conversion 'X' - The result is formatted as a hexadecimal integer, uppercase
参考:Java code To convert byte to Hexadecimal
怎么用Integer.toHexString(int)得到byte类型的十六进制字符串形式?