Java Stream 是一种强大的数据处理工具,可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面,包括 groupingBy、groupingBy、joining、mapping 等操作,让你的代码行云流水,更加优雅。
代码示例:
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupingByExample {
public static void main(String[] args) {
List<String> stringList = Arrays.asList("hello", "world", "java", "stream");
Map<Integer, List<String>> result = stringList.stream()
.collect(Collectors.groupingBy(String::length));
System.out.println(result);
}
}
输出结果:
{5=[hello, world], 4=[java], 6=[stream]}
代码示例:
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class PartitioningByExample {
public static void main(String[] args) {
List<Integer> numberList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Map<Boolean, List<Integer>> result = numberList.stream()
.collect(Collectors.partitioningBy(n -> n % 2 == 0));
System.out.println(result);
}
}
输出结果:
{false=[1, 3, 5, 7, 9], true=[2, 4, 6, 8, 10]}
代码示例:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class JoiningByExample {
public static void main(String[] args) {
List<String> stringList = Arrays.asList("hello", "world", "java", "stream");
String result = stringList.stream()
.collect(Collectors.joining(","));
System.out.println(result);
}
}
输出结果:
hello,world,java,stream
代码示例:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class MappingByExample {
public static void main(String[] args) {
List<String> stringList = Arrays.asList("hello", "world", "java", "stream");
List<String> result = stringList.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(result);
}
}
输出结果:
[HELLO, WORLD, JAVA, STREAM]
代码示例:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FlatMappingByExample {
public static void main(String[] args) {
List<List<String>> nestedList = Arrays.asList(
Arrays.asList("hello", "world"),
Arrays.asList("hello","java", "stream"));
List<String> result = nestedList.stream()
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList());
System.out.println(result);
}
}
输出结果:
[hello, world, java, stream]
代码示例:
import java.util.stream.Stream;
public class IteratingByExample {
public static void main(String[] args) {
Stream.iterate(new int[]{0, 1}, t -> new int[]{t[1], t[0] + t[1]})
.limit(10)
.map(t -> t[0])
.forEach(System.out::println);
}
}
输出结果:
0
1
1
2
3
5
8
13
21
34
代码示例:
import java.util.stream.Stream;
public class EmptyStreamExample {
public static void main(String[] args) {
Stream<String> emptyStream = Stream.empty();
System.out.println(emptyStream.count());
}
}
输出结果:
0
代码示例:
import java.util.stream.Stream;
public class OfStreamExample {
public static void main(String[] args) {
Stream<String> stringStream = Stream.of("hello", "world", "java", "stream");
stringStream.forEach(System.out::println);
}
}
输出结果:
hello
world
java
stream
代码示例:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class ConcatStreamExample {
public static void main(String[] args) {
List<String> list1 = Arrays.asList("hello", "world");
List<String> list2 = Arrays.asList("java", "stream");
Stream<String> stream1 = list1.stream();
Stream<String> stream2 = list2.stream();
List<String> result = Stream.concat(stream1, stream2)
.collect(Collectors.toList());
System.out.println(result);
}
}
输出结果:
[hello, world, java, stream]
代码示例:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class UnorderedStreamExample {
public static void main(String[] args) {
List<Integer> numberList = Arrays.asList(1, 3, 2, 4, 10, 6, 8, 7, 9, 6);
List<Integer> result = numberList.stream()
.sorted()
.unordered()
.collect(Collectors.toList());
System.out.println(result);
}
}
输出结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
感谢大佬看到这里,如果你看完觉得没问题,那么你需要反思一下了哦。好了我们可以在仔细地看看,示例10.unordered()的代码。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class UnorderedStreamExample {
public static void main(String[] args) {
List<Integer> numberList = Arrays.asList(1, 3, 2, 4, 10, 6, 8, 7, 9, 6);
List<Integer> result = numberList.stream()
.sorted()
.unordered()
.collect(Collectors.toList());
System.out.println(result);
}
}
输出结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
执行过程分析,首先输入了一个无序的流,然后使用sorted()对流进行排序,然后在使用unordered(),去除流的有序约束。然后输出为List,在进行打印出来。按理来说,输出的顺序应该是一个无需的,而不是有序的。
unordered()操作不会执行任何操作来显式地对流进行排序。它的作用是消除了流必须保持有序的约束,从而允许后续操作使用不必考虑排序的优化。
对于顺序流,顺序的存在与否不会影响性能,只影响确定性。如果流是顺序的,则在相同的源上重复执行相同的流管道将产生相同的结果;如果是非顺序流,重复执行可能会产生不同的结果。
unordered()操作,是消除了流必须保持有序的约束。并不会改变,流原有的顺序。对于并行流,放宽排序约束有时可以实现更高效的执行。在流有序时, 但用户不特别关心该顺序的情况下,使用 unordered() 明确地对流进行去除有序约束可以改善某些有状态或终端操作的并行性能。
https://segmentfault.com/q/1010000017969473
如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。
我是不一样的科技宅,每天进步一点点,体验不一样的生活。我们下期见!