Java Collections类、Stream流

 Collections类

Java中的Collections类是一个功能丰富的工具类,它提供了一系列静态方法来操作和处理集合。以下是一些主要的功能:

  1. 创建集合:可以使用Collections类创建空集合、单元素集合以及不可变集合等。这为集合的初始化提供了便利。
  2. 排序:Collections类中的sort方法可以对List集合进行排序,这对于数字或者字符串类型的集合来说特别有用。
  3. 查找:提供了如maxmin等方法来查找集合中的最大最小元素。
  4. 填充fill方法可以用于将集合中的所有位置填充上相同的值。
  5. 复制copy方法允许将一个集合的内容复制到另一个集合中。
  6. 替换replace系列方法可以用来替换集合中的元素。
  7. 线程安全synchronizedCollection方法可以将非线程安全的集合转换为线程安全的集合。
  8. 其他实用方法:如shuffle用于随机打乱集合中元素的顺序,reverse用于反转列表等。

以下是一些Collections类中常用方法的代码示例:

  • 创建集合
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");

// 创建一个不可变集合
List<String> unmodifiableList = Collections.unmodifiableList(list);

// 创建一个空集合
Set<Integer> emptySet = Collections.emptySet();

// 创建一个单元素集合
Set<String> singletonSet = Collections.singleton("hello");
  • 排序
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9);
Collections.sort(numbers); // [1, 1, 3, 4, 5, 9]
  • 查找
List<String> fruits = Arrays.asList("apple", "banana", "orange");
String maxFruit = Collections.max(fruits); // "orange"
String minFruit = Collections.min(fruits); // "apple"
  • 填充
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3));
Collections.fill(numbers, 0); // [0, 0, 0]
  • 复制
List<String> source = Arrays.asList("a", "b", "c");
List<String> destination = new ArrayList<>(source.size());
Collections.copy(destination, source); // ["a", "b", "c"]
  • 替换
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
Collections.replaceAll(list, "x"); // ["x", "x", "x"]
  • 线程安全
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");

List<String> synchronizedList = Collections.synchronizedList(list);

Stream流

Java Stream流是Java 8中引入的一个处理集合的API,它允许以声明式方式处理数据集合

Stream流的主要特点包括:

  1. 声明式编程:通过Stream API,你可以指定对集合进行的操作,而不需要编写具体的循环或迭代代码。这种方式类似于使用SQL语句执行数据库查询。
  2. 函数式操作:Stream API与Lambda表达式紧密结合,使得对集合的操作更加简洁和高效。你可以使用Lambda表达式和方法引用来定义对流中元素的行为。
  3. 中间操作和终端操作:Stream流的操作分为中间操作(如filter、map、sorted等)和终端操作(如collect、forEach、reduce等)。中间操作可以链接起来形成一个流水线,而终端操作则会触发实际的计算。
  4. 并发处理:Stream流支持并行处理,这意味着你可以利用多核处理器的优势来加速大规模数据的处理。你只需要简单地调用parallelStream方法而不是stream方法,就可以让数据并行处理。

在实际使用中,Stream流可以极大地提高代码的可读性和编写效率。例如,你可以使用Stream流来过滤集合中的元素、对元素进行映射转换、对集合进行排序、将结果收集到新的集合中,以及其他复杂的数据处理任务。

以下是使用Java Stream流实现一些常见操作的示例代码:

  • 过滤集合中的元素
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
        .filter(n -> n % 2 == 0)
        .collect(Collectors.toList());
System.out.println(evenNumbers); // [2, 4, 6, 8, 10]
  • 对集合中的元素进行映射转换
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> uppercaseNames = names.stream()
        .map(String::toUpperCase)
        .collect(Collectors.toList());
System.out.println(uppercaseNames); // [ALICE, BOB, CHARLIE]
  • 对集合进行排序
List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 9, 3);
List<Integer> sortedNumbers = numbers.stream()
        .sorted()
        .collect(Collectors.toList());
System.out.println(sortedNumbers); // [1, 2, 3, 5, 8, 9]
  • 将结果收集到新的集合中
List<String> words = Arrays.asList("apple", "banana", "cherry");
Set<String> uniqueWords = words.stream()
        .collect(Collectors.toSet());
System.out.println(uniqueWords); // [banana, cherry, apple]

这些示例展示了如何使用Java Stream流来处理集合,包括过滤、映射、排序和收集等操作。Stream流提供了一种声明式的方式来处理数据,使得代码更加简洁和易于理解。

上一篇:P8739 [蓝桥杯 2020 国 C] 重复字符串


下一篇:Jenkins CI/CD 持续集成专题二 Jenkins 相关问题汇总