Java中将 ArrayList 转换为 LinkedHashMap
LinkedHashMap 是Java中的一个预定义类,类似于HashMap,不同于HashMap,包含key及其各自的值,在LinkedHashMap中保留了插入顺序。
我们需要将ArrayList转换成LinkedHashMap,LinkedHashMap的Key值就是ArrayList的一个索引,基本上LinkedHashMap在迭代和存储数据方面也和ArrayList是一样的。
例子 :
Input ArrayList : { 5, 6, 7, 8, 4 }
Output LinkedHashMap :
Index | Value
1 | 5
2 | 6
3 | 7
4 | 8
5 | 4
我们可以通过两种方式将 ArrayList 转换为 LinkedHashMap:
- 通过遍历整个 ArrayList 使用 for-each 循环并将每个元素推送到 LinkedHashMap。
- 在Java 8 版本中使用流。
方法:使用 for-each 循环
- 在 ArrayList 中输入。
- 使用 For/While 循环在 LinkedHashMap 中推送值(假设第一个索引为 1,LinkedHashMap 的键将是 ArrayList 的索引)
伪代码:
while (i < l1.size()) {
l.put(i + 1, l1.get(i));
i++;
}
Here, "l1" is ArrayList and "l" is LinkedHashMap.
Java
// Java program to convert ArrayList
// to LinkedHashMap
import java.util.*;
import java.io.*;
class GFG {
public static void main(String[] args)
{
LinkedHashMap l = new LinkedHashMap<>();
ArrayList l1 = new ArrayList<>();
l1.add(5);
l1.add(6);
l1.add(7);
l1.add(8);
l1.add(4);
int i = 0;
// Adding one by one the elements
// of ArrayList to LinkedHashMap
while (i < l1.size())
{
l.put(i + 1, l1.get(i));
i++;
}
System.out.println("Key | Value");
// .entrySet() method gives us the list of all
// mappings reference of the map
for (Map.Entry it :l.entrySet()) {
System.out.println(" " + it.getKey() + " | "
+ it.getValue());
}
}
}
Java
// Java program to convert ArrayList to LinkedHashMap
import java.util.*;
import java.io.*;
import java.util.stream.Collectors;
class integer {
private Integer id;
private String name;
public integer(Integer id, String name)
{
this.id = id;
this.name = name;
}
public Integer getId() { return this.id; }
// the .toString method of Object class
// will be called by default when the object
// of integer class will be made
public String toString()
{
return "[" + this.id + "=>" + this.name + "]";
}
}
class GFG {
public static void main(String[] args)
{
List List = new ArrayList();
List.add(new integer(1, "will"));
List.add(new integer(2, "mike"));
List.add(new integer(3, "luke"));
List.add(new integer(4, "dustin"));
System.out.println("ArrayList contains: " + List);
// stream Api is used here to convert the
// List to LinkedHashMap
Map HashMap = List.stream().collect(Collectors.toMap(
integer::getId, integer -> integer));
System.out.println("Map contains: " + HashMap);
}
}
输出
Key | Value
1 | 5
2 | 6
3 | 7
4 | 8
5 | 4
时间复杂度: O(n)
方法 2:使用流
如果您使用的是Java 8 或更高版本,还有另一种方法,您可以使用流将 List 转换为 LinkedHashMap 对象。 Stream API 用于处理对象集合。流是支持各种方法的对象序列,这些方法可以通过流水线来产生所需的结果。
例子:
Java
// Java program to convert ArrayList to LinkedHashMap
import java.util.*;
import java.io.*;
import java.util.stream.Collectors;
class integer {
private Integer id;
private String name;
public integer(Integer id, String name)
{
this.id = id;
this.name = name;
}
public Integer getId() { return this.id; }
// the .toString method of Object class
// will be called by default when the object
// of integer class will be made
public String toString()
{
return "[" + this.id + "=>" + this.name + "]";
}
}
class GFG {
public static void main(String[] args)
{
List List = new ArrayList();
List.add(new integer(1, "will"));
List.add(new integer(2, "mike"));
List.add(new integer(3, "luke"));
List.add(new integer(4, "dustin"));
System.out.println("ArrayList contains: " + List);
// stream Api is used here to convert the
// List to LinkedHashMap
Map HashMap = List.stream().collect(Collectors.toMap(
integer::getId, integer -> integer));
System.out.println("Map contains: " + HashMap);
}
}
输出
ArrayList contains: [[1=>will], [2=>mike], [3=>luke], [4=>dustin]]
Map contains: {1=[1=>will], 2=[2=>mike], 3=[3=>luke], 4=[4=>dustin]}