使用 lambda 表达式进行集合类型转换

目标类型 List

转 List

List<String> list1 = Lists.newArrayList();
List<String> list2 = list1.stream().map(string -> {
	return "stream().map()处理之后:" + string;
}).collect(Collectors.toList());

转 Map

转换属性 Map,值为属性

List<SystemTabMenu> allList = Lists.newArrayList();
Map<String, String> map = allList.stream().
	collect(Collectors.toMap(SystemTabMenu::getParentid, SystemTabMenu::getParentid));

// Collectors.toMap在遇到重复键时会抛出IllegalStateException异常
// 如果你希望在遇到重复键时保留最后一个值,可以使用Map::putIfAbsent作为BinaryOperator
Map<String, String> map = allList.stream().
	collect(Collectors.toMap(SystemTabMenu::getParentid, SystemTabMenu::getParentid,
                                  (oldValue, newValue) -> newValue));

转换属性 Map,值为对象

List<SystemTabMenu> allList = Lists.newArrayList();
Map<String, SystemTabMenu> map = allList.stream().
	collect(Collectors.toMap(SystemTabMenu::getParentid, v -> v));

分组汇总

List<UploadDataStatistics> allList = Lists.newArrayList();
Map<String, Integer> resultMap = allList.stream().
    collect(Collectors.groupingBy(UploadDataStatistics::getDataType,
                       Collectors.summingInt(UploadDataStatistics::getSuccessnum)));

转 Map<String, List>

List<SystemTabMenu> allList = Lists.newArrayList();
Map<String, List<SystemTabMenu>> map = allList.stream().
	collect(Collectors.groupingBy(e -> e.getParentid()));

转数组 String []

List<String> list = Arrays.asList("a","b","c");
String[] strings=list.toArray(new String[0]);

转数组 Integer []

List<Integer> list = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
Integer[] integers = list.toArray(new Integer[0]);

转数组 int []

List<Integer> list = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
int[] arr1 = list.stream().mapToInt(Integer::valueOf).toArray();
  1. 想要转换成 int [] 类型,就得先转成 IntStream。

  2. 通过 mapToInt () 把 Stream<Integer> 调用 Integer::valueOf 来转成 IntStream

  3. 通过 IntStream 中默认 toArray () 转成 int []。

过滤出一个元素

List<User> users = Lists.newArrayList();
User match = users.stream().filter((user) -> user.getId() == 1).findAny().get();

求最小值

int min = list.stream().mapToInt(t->t).min().getAsInt();

转拼接字符串

List<Long> list = Arrays.asList(0, 1, 2);
String ids = list.stream().map(String::valueOf).collect(Collectors.joining(","));

目标类型 Set

转 Set

Set<String> nameSet = personSet.stream().map(Person::getName).collect(Collectors.toSet());

目标类型 Map

转 List

map.entrySet().stream().map(e -> e.getValue() + e.getKey()).collect(Collectors.toList());

取 Value 最大的 Key

Map<String, Integer> map = new HashMap<>();
String maxKey = map.entrySet()
        .stream()
        .sorted(Map.Entry.comparingByValue((t1, t2) -> t2 - t1))
        .map(e -> e.getKey()).collect(Collectors.toList()).get(0);

收集 Map<Kry,List>

Map<Integer, List<Integer>> map = new TreeMap<>();

map.computeIfAbsent(key, k -> new ArrayList<>());
map.get(key).add(value);

转拼接字符串

Map<Long, String> infoIds = new TreeMap<>();
String ids = infoIds.keySet().stream().map(String::valueOf).collect(Collectors.joining(","));

目标类型 int 数组

截取数组

int[] data = {0, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
int[] newData = Arrays.copyOfRange(data,2,7);
// {2,3,4,5,6}

转 List

Integer [] 转 List<Integer>

List<Integer> list = Arrays.asList(integers1);

int [] 转 List<Integer>

int[] data = {0, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
List<Integer> list = Arrays.stream(data).boxed().collect(Collectors.toList());
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Arrays.stream (arr) 可以替换成 IntStream.of (arr)。

  1. 使用 Arrays.stream 将 int [] 转换成 IntStream。
  2. 使用 IntStream 中的 boxed () 装箱。将 IntStream 转换成 Stream<Integer>
  3. 使用 Stream 的 collect (),将 Stream<T> 转换成 List<T>,因此正是 List<Integer>

String [] 转换为 List<Integer>

String[] stringArray = {"1", "2", "3", "4", "5"};
List<Integer> integerList = Arrays.stream(stringArray)
                                  .map(Integer::valueOf)
                                  .collect(Collectors.toList());

转包装类数组

int [] 转 Integer []

int[] data = {0, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new);
// {0, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }

Arrays.stream (arr) 可以替换成 IntStream.of (arr)。

  1. 使用 Arrays.stream 将 int [] 转换成 IntStream。
  2. 使用 IntStream 中的 boxed () 装箱。将 IntStream 转换成 Stream<Integer>
  3. 使用 Stream 的 toArray,传入 IntFunction<A []> generator。这样就可以返回 Integer 数组。不然默认是 Object []。

目标类型 String 数组

数组类型转换

String[] data = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
Integer[] integers = Arrays.stream(tenantids).map(Integer::valueOf).toArray(Integer[]::new);

转 List

String[] data = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
List<Integer> list = Arrays.stream(data).map(Integer::valueOf).collect(Collectors.toList());

转 Set

String[] data = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
List<Integer> list = Arrays.stream(data).map(Integer::valueOf).collect(Collectors.toSet());