我实验了以后觉得stream来对集合操作非常之方便,也比较高大上,我打算以后写代码都如果能使用的话尽量使用,尽量适用新的开发方式,很简化代码,那么先大概说说一些使用的实例。
先添加list集合的数据用来测试
public static List addData() {
List list = new ArrayList();
for (int i = 1; i <= 10; i++) {
Map map = new HashMap();
map.put("userid", i + "");
map.put("username", "df" + i);
map.put("age", 23 + i);
list.add(map);
}
return list;
}
main方法进行调用操作
public static void main(String[] args) {
List list = addData();
System.out.println(list);
datafx(list);
}
datafx方法里写入测试代码
1.查询list集合数据年龄为25岁以上的总数是多少
filter是过滤条件
/**
* 查询list数据年龄>25的总数有多少
* stream() − 为集合创建串行流。
* filter() - 用于通过设置的条件过滤出元素
* */
long count = list.stream().filter(map ->
Integer.parseInt(map.get("age").toString()) > 25).count();
System.out.println(count);
返回结果
2.求最大值最小值,返回map集合
/**
* max和min,查询最大值,最小值
* */
Map MinMap = list.stream().min(Comparator.
comparing(map -> Integer.parseInt(map.get("userid").toString()))).get();
System.out.println(MinMap);
Map maxMap = list.stream().max(Comparator.
comparing(map -> Integer.parseInt(map.get("userid").toString()))).get();
System.out.println(maxMap);
返回结果
3.对list数据age求和,也可以求最大值,最小值,平均值,可以返回int ,double,long数据类型
/**
* 对list数据求和sum
* 对list数据求最大值max
* 对list数据求最小值min
* */
int countSum = list.stream().mapToInt(map -> Integer.parseInt(map.get("age").toString().toString())).sum();
System.out.println("求和:" + countSum);
OptionalLong maxvalue = list.stream().mapToLong(map -> Long.parseLong(map.get("age").toString().toString())).max();
System.out.println("最大值:" + maxvalue);
OptionalDouble Mindouble = list.stream().mapToDouble(map -> Double.parseDouble(map.get("age").toString())).min();
System.out.println("最小值:" + Mindouble);
返回结果
4.将字符串转换成字符串集合List(String)
/**
* 如果返回值是Stream,那么是惰性求值;
*如果返回值是另一个值或者为空,那就是及早求值
*将字符串转换成list<String> 字符串
*及早求值操作
* */
List<String> collect = Stream.of("a", "b", "c", "d", "f").collect(Collectors.toList());
System.out.println(collect);
返回结果
5.将字符串转换成字符串集合List(String)并转换成大写,并用map方式
/**
* map可以将一种类型的值转换成另一种类型。
* map 方法用于映射每个元素到对应的结果
* */
List<String> streamMap = Stream.of("a", "b", "c", "d", "f").map(String -> String.toUpperCase())
.collect(Collectors.toList());
System.out.println(streamMap);
返回结果
6.使用filter过滤出想要的数据并转换成集合数据
/**
* filter遍历并检查其中的元素时,可用filter
* */
List<String> filter = Stream.of("a", "b", "c", "d", "f").filter(value ->
value.contains("d")).collect(Collectors.toList());
System.out.println(filter);
List ss = list.stream().filter(map -> map.get("userid").toString().equals("1")).
collect(Collectors.toList());
System.out.println(ss);
返回结果
7.reduce使用,下面的例子使用reduce求和,0表示起点,acc表示累加器,保存着当前累加结果(每一步都将stream中的元素累加至acc),element是当前元素。
/**
* reduce
* reduce操作可以实现从一组值中生成一个值,
* 在上述例子中用到的count、min、max方法事实上都是reduce操作。
* */
//下面的例子使用reduce求和,0表示起点,acc表示累加器,
//保存着当前累加结果(每一步都将stream中的元素累加至acc),element是当前元素。
Integer reduce = Stream.of(1, 2, 3).
reduce(0, (acc, element) -> acc + element);
System.out.println(reduce);
返回结果
8.limit使用,limit 方法用于获取指定数量的流
/**
* limit 方法用于获取指定数量的流
* 以下代码片段使用 limit 方法打印出 10 条数据:
* Stream 提供了新的方法 'forEach' 来迭代流中的每个数据
* */
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
返回结果
9.sorted使用,sorted 方法用于对流进行排序
/**
* sorted 方法用于对流进行排序
* 以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:
* */
Random randomSorted = new Random();
randomSorted.ints().limit(10).sorted().forEach(System.out::println);
返回结果
以上就是所有的例子了。