简要介绍list和map有参数时如何初始化、集合在jdk8中如何使用stream流使代码更简洁高效。

集合的初始化

无参数初始化这里就不介绍了,简要说明有参数的。

数组

  1. int[] ints = {1, 2, 3};

List

  1. # 方式一:推荐、速度快
  2. List<String> strings = new ArrayList<>(Arrays.asList("123", "123"));
  3. # 方式二:备用
  4. List<String> strings2 = new ArrayList<String>() {{
  5. add("123");
  6. add("string");
  7. }};
  8. System.out.println(strings2);

Map

  1. HashMap<String, String> map = new HashMap<String, String>() {
  2. {
  3. put("name", "test");
  4. put("age", "20");
  5. }
  6. };

stream流

jdk8新特性,类似C#的linq,可以对集合进行sql操作。

过滤、排序、转换集合

  1. # 案例一:过滤、排序
  2. List<Item> collect1 = items.stream().filter(name -> name.getPrice() > 100)
  3. .sorted((x, y) -> y.getPrice() - x.getPrice())
  4. .collect(Collectors.toList());
  5. # 案例二:转换新集合
  6. items.stream().filter(name -> name.getPrice() > 100)
  7. .sorted((x, y) -> y.getPrice() - x.getPrice())
  8. .map(item -> item.getPrice())
  9. .collect(Collectors.toList());
  10. # 案例三:统计,可以获取最大、最下、评价值、求和
  11. items.stream().filter(name -> name.getPrice() > 100)
  12. .sorted((x, y) -> {
  13. return y.getPrice() - x.getPrice();
  14. })
  15. .distinct() // 去重复
  16. .mapToInt(x -> x.getPrice())
  17. .summaryStatistics();
  18. # 案例四:拼接字符串
  19. strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", "));

去重

简单去重

  1. List unique = list.stream().distinct().collect(Collectors.toList());

复杂对象去重

  1. // 根据name,sex两个属性去重
  2. List<Person> unique = persons.stream().collect(
  3. Collectors. collectingAndThen(
  4. Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getName() + ";" + o.getSex()))), ArrayList::new)
  5. );