在开发中,我们经常需要将集合对象(List,Set)转换为数组对象,或者将数组对象转换为集合对象。Java提供了相互转换的工具,但是我们使用的时候需要注意,不能乱用滥用。
1、数组对象转换为集合对象
最暴力的方式是new一个集合对象,然后遍历数组,依次将数组中的元素放入到新的集合中,但是这样做显然过于麻烦。Java中有一个工具类Arrays类,提供一个方法asList()可以直接将数组转换为List集合。但是一定要注意,Arrays.asList(T... a)返回的是一个固定长度的ArrayList,是不能对返回的list进行add或者remove等操作的,因为返回的并不是java.util.ArrayList对象,是java.util.Arrays.ArrayList对象,是Arrays类的内部类。查看源码可以知道如果对该类进行add等操作,是要抛出异常的。该类的定义是起到一个桥梁作用,如果我们需要对转换的List集合进行修改操作,我们可以通过List<T> list = new ArrayList<T>(Arrays.asList(array));的方式,这样产生的list是觉得可以修改的。代码实现如下:
String[] arrStr = {"a","b","c"};
List<String> list1 = Arrays.asList(arrStr);
List<String> list2 = new ArrayList<String>(Arrays.asList(arrStr));
结论:如果我们需要将数组转换为可修改的集合List就使用List<T> list = new ArrayList<T>(Arrays.asList(array));如果我们对转换的集合不修改就直接使用List list = Arrays.asList(array);
2、集合对象转换为数组对象
这个就简单了一常用了,直接使用List接口的toArray方法。需要注意的是List有两个重载的toArray方法,第一个List.toArray()返回Object[],第二个List.toArray(T[] a)返回T[].那到底使用哪个呢,两种方法有什么区别呢?第一种返回的是Object[]类型,如果我们想要转换的数组的类型不是Object,那就需要向下转型,但是向下转型会导致类型不兼容,所以会抛出异常,但是我们可以遍历Object[]数组,让后将数组中的每一个元素进行类型转换,这样就不会类型转换异常。通常我们使用带参数的方法,这样就可以通过泛型,返回特定类型的数组,就不用再依次转换了。比如我们将List<String>转换为String[],我们可以通过下面的代码实现:
List<String> listStr = new ArrayList<String>();
listStr.add("one");
listStr.add("two");
String[] arrStr1 = listStr.toArray(new String[] {});
String[] arrStr2 = listStr.toArray(arrStr1);
String[] arrStr3 = (String[]) listStr.toArray();//这样是不行的。不能直接将Object[]转换为String[]
结论:将集合转换为数组,最好使用toArray(T[] t)方法返回指定类型的数组。
3、判断某个元素是否属于集合或者数组
对于集合对象,提供了直接使用的方法。可以通过contailns方法判断。当然也可以自己使用最暴力的方式,遍历集合中的所有元素。
对于数组对象,没有直接使用的方法,我们可以使用最暴力的方式,遍历数组,但是显然这样做不优雅。所以我们可以借助上面说的现将数组对象转换为集合对象,然后使用集合的contains方法。如果我们只是想判断特定元素是否存在于数组对象中,不对原数据进行修改,那么就可以直接使用Arrays.asList()方法,生成一个固定大小的List,然后直接使用contains方法,具体代码如下:
List<String> listStr = new ArrayList<String>();
listStr.add("a");
listStr.add("b");
listStr.add("c");
boolean result1 = listStr.contains("d");//false
String[] arrStr= {"a","b","c"};
boolean result2 = Arrays.asList(arrStr).contains("a");//true
在开发中,我们经常需要将集合对象(List,Set)转换为数组对象,或者将数组对象转换为集合对象。Java提供了相互转换的工具,但是我们使用的时候需要注意,不能乱用滥用。1、数组对象转换为集合对象 最暴力的方式是new一个集合对象,然后遍历数组,依次将数组中的元素放入到新的集合中,但是这样做显然过于麻烦。Java中有一个工具类Arrays类,提供一个方法asList()可以直接将数组
编码如同写作,应当追求字迹工整,逻辑清晰,分段合理且言简意赅。其他的先不谈,如何做到言简意赅呢? 答案就是用尽可能短的代码去实现需求,其实也不然,简短的代码可能对于新手不太友好,但大多情况下,尽可能短的代码总是更有优势的。下面结合实际场景举个栗子简要分析一波 。
在实际的应用场景中,经常会遇到需要 将另一个对象的集合转化为另一个集合的对象 的需求,比如:现在有一个OrderDetail(订单详
这种场景常见于java应用之间的通讯, 比如A应用向B应用获取数据。 或者读取B应用预先存的数据。
此时一般来说实体类实现java自带的序列化接口, 然后使用以下方式即可进行序列化。
private Object byteToObject( byte[] bytes) {
java.lang.Object.
错误方式:
List<StoreInfo> list = new ArrayList();
StoreInfo[] array = (StoreInfo[])list.toArray();
这种写法,在编译时,没有任何问题。但是...
A对象List 转 为B对象List
如下所示:将Long类型的List 转换为String类型的List:
List<Long> longList = new ArrayList<>();
longList.add(1L);
longList.add(2L);
longList.add(3L);
List&...
有时候我们会碰到这种问题:两个List中存放的对象不一样,但是大部分的属性相同,想把其中一个List中的对象加上别的属性之后变成另一个List中的对象,例如:
List list = req.getNafmiiMemberInfo();
List tempList = new ArrayList();
//把得到的数据转换成要导入的数据
for (NafmiiMemberInfo nafm
将对象集合转换成另外一个对象集合
public class ListUtil {
public static <S, T> List<T> copyProperties(List<S> sources, Supplier<T> target) {
return sources.stream().map(source -> {
T t = target.get();
BeanUtils
List 集合给我们提供了一个把LIst转为数组的方法, toArray();但是这个方法返回的类型是 Object[ ] ;如果我们要是想强转为我们想要的类型,比如说是字符串数组类型 String[ ] ;List list = new ArrayList<String>();
list.add("ab");
list.add("cd");
list.add("ef");
Strin
对象去重可以通过将对象转换成字符串,再将字符串作为键值存储到一个新的对象中,这样相同的对象会被视为同一个键值,最后再将新的对象转换回原来的对象格式即可。
示例代码:
```javascript
function uniqueObject(arr) {
const obj = {};
for (let i = 0; i < arr.length; i++) {
const str = JSON.stringify(arr[i]);
obj[str] = arr[i];
return Object.values(obj);
数组去重可以使用 ES6 中的 Set 数据结构或者利用 indexOf 和 includes 方法遍历数组,将重复的元素删除。
示例代码:
```javascript
// 使用 Set 数据结构
function uniqueArray(arr) {
return Array.from(new Set(arr));
// 利用 indexOf 和 includes 方法
function uniqueArray(arr) {
const result = [];
for (let i = 0; i < arr.length; i++) {
if (result.indexOf(arr[i]) === -1 && !result.includes(arr[i])) {
result.push(arr[i]);
return result;
需要注意的是,以上代码对于复杂数据类型(如对象、函数等)的去重并不适用,因为 indexOf 和 includes 方法无法比较复杂数据类型是否相等,而 Set 数据结构默认使用严格相等(===)比较。因此,在对复杂数据类型进行去重时,可以参考对象去重的方法,先将复杂数据类型转换成字符串再进行去重。