声明:本文使用JDK1.8
Java8提供了丰富的lambda的API。今天我们来讲讲关于其中的stream(流的操作)。对于List集合,有了stream的流操作,感觉如虎添翼。
生成一个List
1 2 3 4 5 6 7
| String str = "1,2,3,4,10,11,9,66,222,12"; List<Integer> list = Stream.of(str.split(",")) .map(Integer::valueOf) .filter(x-> !Objects.equals(x,3)) .sorted(Comparator.reverseOrder()) .limit(4) .collect(Collectors.toList());
|
上面的代码Stream.of 为我们生成了一个List,但是我们需要的Integer,所以我们还需要使用map来转换类型。然后对于生成的列表,我们不想要其中的3,于是我们使用filter来过滤掉列表中的3。对于现在列表我们又想是倒序后的列表的前四条数据,于是我们在使用sorted来对列表来进行倒序后,再使用limit取前四条。顺便说一句,对于比较,推荐使用Objects.equals(a,b).
下面来简单的介绍下stream。
map
map:对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素
map方法是对列表里面的对象的转换,比如上面的map的功能是吧String转换成Integer。除了这样的转换,你也可以对对象进行你需要的操作。比如现在有一个对象ListDTO:
1 2 3 4 5 6 7 8 9 10 11
| @Data public class ListDTO{ public Integer id; public String name; public ListDTO() { } public ListDTO(Integer id, String name) { this.id = id; this.name = name; } }
|
现在这么一个List,你现在只想得到这个列表中ListDTO对象里面的id,现在你就可以这样操作:
1
| List<Integer> idList = beans.stream().map(ListDTO::getId).collect(Collectors.toList());
|