例如有一个集合:
List<User> users = getList(); //从数据库查询的用户集合
现在想获取User的身份证号码;在后续的逻辑处理中要用;
常用的方法我们大家都知道,用for循环
List<String> idcards=new ArrayList<String>();//定义一个集合来装身份证号码
for(int i=0;i<users.size();i++){
idcards.add(users.get(i).getIdcard());
}
这种方法要写好几行代码,有没有简单点的,有,java8 API能一行搞定:
List<String> idcards= users.stream().map(User::getIdcard).collect(Collectors.toList())
解释下一这行代码:
users:一个实体类的集合,类型为List<User>
User:实体类
getIdcard:实体类中的get方法,为获取User的idcard
stream()优点
无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。
为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。
惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。
可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。
stream().map()方法的使用示例:
public static void main(String[] args){ //toUpper转大写 List<String> list = Arrays.asList("a","b","c"); List<String> list1 = list.stream().map(String::toUpperCase).collect(Collectors.toList()); System.out.println(list1);//[A, B, C] //某些计算 List<Integer> num = Arrays.asList(1,2,3,4); List<Integer> num1 = num.stream().map(n->n*2).collect(Collectors.toList()); System.out.println(num1);//[2, 4, 6, 8] List<Integer> num2 = num.stream().map(n->n*2).map(n->n-1).collect(Collectors.toList()); System.out.println(num2);//1, 3, 5, 7] //forEach Stream<String> stream = Stream.of("a","b","c"); stream.map(String::toUpperCase).forEach(System.out::println);//A \r\n B \r\n C }
stream.map和stream.foreach区别
map
<R> Stream<R> map(Function<? super T, ? extends R> mapper)
map 方法接收一个功能型接口,功能型接口接收一个参数,返回一个值。map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素。
foreach
void forEach(Consumer<? super T> action)
forEach 接收一个 Consumer 接口。它只接收不参数,没有返回值。然后在 Stream 的每一个元素上执行该表达式,类似加强for()语句
filter
Stream<T> filter(Predicate<? super T> predicate)
返回由此流的元素组成的流,该流匹配给定的谓词。例如:
stream.filter(e->e != null)
sorted
Stream<T> sorted(Comparator<? super T> comparator);
sorted((x,y)->{return x.get("value").compareTo(y.get("value"));}) 或者 (推荐)sorted(Comparator.comparing(k->k.get("value").toString()))
实体类提取关键字段转成json
[{"id":1,"name":"aaa"},{"id":2,"name":"bbb"}]
dataSourceList.stream().map(v -> {
Map<String, Object> map = new HashMap<>();
map.put("id", v.getId());
map.put("sourceName", v.getSourceName());
return map;
}).collect(Collectors.toList())
{
"dataSourceType": [
{
"desc": "a",
"value": 1
},
{
"desc": "b",
"value": 2
}
],
"xxStatus": [
{
"desc": "a",
"value": 1
},
{
"desc": "b",
"value": 2
}
]
}
List<SysDictionary> list = dictionaryService.list(queryWrapper);
Map<String, List<SysDictionary>> collect = list.stream().collect(Collectors.groupingBy(SysDictionary::getDicType));
Map<String, List<Map<String, String>>> resultMap = new HashMap<>();
for (String c : collect.keySet()) {
List<Map<String, String>> convertList = collect.get(c).stream().map(v -> {
Map<String, String> convertMap = new HashMap<>();
convertMap.put("desc", v.getDicName());
convertMap.put("value", v.getDicValue());
return convertMap;
}).sorted((x,y)->{return x.get("value").compareTo(y.get("value"));}).collect(Collectors.toList());
resultMap.put(c,convertList);
}
return JSON.toJSONString(resultMap);
参考:https://www.cnblogs.com/ngy0217/p/11080840.html
https://blog.csdn.net/baidu_37107022/article/details/78568472