ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## [流创建](https://lingcoder.gitee.io/onjava8/#/book/14-Streams?id=%e6%b5%81%e5%88%9b%e5%bb%ba) 你可以通过`Stream.of()`很容易地将一组元素转化成为流(`Bubble`类在本章的后面定义): ~~~ // streams/StreamOf.java import java.util.stream.*; public class StreamOf { public static void main(String[] args) { Stream.of(new Bubble(1), new Bubble(2), new Bubble(3)) .forEach(System.out::println); Stream.of("It's ", "a ", "wonderful ", "day ", "for ", "pie!") .forEach(System.out::print); System.out.println(); Stream.of(3.14159, 2.718, 1.618) .forEach(System.out::println); } } ~~~ 输出结果: ~~~ Bubble(1) Bubble(2) Bubble(3) It's a wonderful day for pie! 3.14159 2.718 1.618 ~~~ 除此之外,每个集合都可以通过调用`stream()`方法来产生一个流。代码示例: ~~~ // streams/CollectionToStream.java import java.util.*; import java.util.stream.*; public class CollectionToStream { public static void main(String[] args) { List<Bubble> bubbles = Arrays.asList(new Bubble(1), new Bubble(2), new Bubble(3)); System.out.println(bubbles.stream() .mapToInt(b -> b.i) .sum()); Set<String> w = new HashSet<>(Arrays.asList("It's a wonderful day for pie!".split(" "))); w.stream() .map(x -> x + " ") .forEach(System.out::print); System.out.println(); Map<String, Double> m = new HashMap<>(); m.put("pi", 3.14159); m.put("e", 2.718); m.put("phi", 1.618); m.entrySet().stream() .map(e -> e.getKey() + ": " + e.getValue()) .forEach(System.out::println); } } ~~~ 输出结果: ~~~ 6 a pie! It's for wonderful day phi: 1.618 e: 2.718 pi: 3.14159 ~~~ 在创建`List<Bubble>`对象之后,我们只需要简单地调用所有集合中都有的`stream()`。中间操作`map()`会获取流中的所有元素,并且对流中元素应用操作从而产生新的元素,并将其传递到后续的流中。通常`map()`会获取对象并产生新的对象,但在这里产生了特殊的用于数值类型的流。例如,`mapToInt()`方法将一个对象流(object stream)转换成为包含整型数字的`IntStream`。同样,针对`Float`和`Double`也有类似名字的操作。 我们通过调用字符串的`split()`(该方法会根据参数来拆分字符串)来获取元素用于定义变量`w`。稍后你会知道`split()`参数可以是十分复杂,但在这里我们只是根据空格来分割字符串。 为了从**Map**集合中产生流数据,我们首先调用`entrySet()`产生一个对象流,每个对象都包含一个`key`键以及与其相关联的`value`值。然后分别调用`getKey()`和`getValue()`获取值。