As you did, yes. That is, you didn't actually re-use the same stream. You re-used the same List (dList), and you called stream() twice to get two different streams. Each of those streams was used once, calling the forEach() method once on each one. That's fine. However you can't call forEach() twice on the same Stream instance. Or more generally, you can't call more than one terminal operation on a given Stream instance.