Java 8 新特性之 Stream

stream of elements -----> filter-> sorted-> map-> collect

List transactionsIds =
widgets.stream()
.filter(b -> b.getColor() == RED)
.sorted((x,y) -> x.getWeight() - y.getWeight())
.mapToInt(Widget::getWeight)
.sum();

1.filter
List strings = Arrays.asList(“abc”, “”, “bc”, “efg”, “abcd”,"", “jkl”);
List filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

Liststrings = Arrays.asList(“abc”, “”, “bc”, “efg”, “abcd”,"", “jkl”);
// 获取空字符串的数量
int count = strings.stream().filter(string -> string.isEmpty()).count();

2.map
List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

personList.stream().map(§ -> {
PersonCountry personName = new PersonCountry();
personName.setCountry(p.getCountry());
return personName;
}).distinct().forEach(System.out::println);

3.forEach:
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

List list = Arrays.asList(“123”, “45634”, “7892”, “abch”, “sdfhrthj”, “mvkd”);
list.stream().forEach(e ->{
if(e.length() >= 5){
return;
}
System.out.println(e);

4.limit
Random random = new Random();
//使用 limit 方法打印出 10 条数据
random.ints().limit(10).forEach(System.out::println);

5:sorted
Random random = new Random();
//使用 sorted 方法对输出的 10 个随机数进行排序
random.ints().limit(10).sorted().forEach(System.out::println);

Property p1 = new Property("叫了个鸡", 1000, 500, 2);
Property p2 = new Property("张三丰饺子馆", 2300, 1500, 3);
Property p3 = new Property("永和大王", 580, 3000, 1);
Property p4 = new Property("肯德基", 6000, 200, 4);
List<Property> properties = Arrays.asList(p1, p2, p3, p4);
Collections.sort(properties, (x, y) -> x.distance.compareTo(y.distance));
String name = properties.get(0).name;
System.out.println("距离我最近的店铺是:" + name);

// Stream操作
String name2 = properties.stream()
.sorted(Comparator.comparingInt(x -> x.distance))
.findFirst()
.get().name;
System.out.println(“距离我最近的店铺是:” + name);

6:collect
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("合并字符串: " + mergedString);

7:count
count = strings.stream().filter(string -> string.length() == 3).count();
System.out.println("字符串长度为 3 的数量为: " + count);

8:统计计算:
List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);

IntSummaryStatistics stats = integers.stream().mapToInt((x) -> x).summaryStatistics();

System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());

9: skip:
//从Person列表中从第2个女性开始,取出所有的女性。
personList.stream().filter(( p ) -> p.getSex() == ‘F’).skip(1).forEach(System.out::println);

10:终止操作–查找与匹配
allMatch–检查是否匹配所有元素
anyMatch–检查是否至少匹配一个元素
noneMatch–检查是否没有匹配所有元素
findFirst–返回第一个元素
findAny–返回当前流中的任意元素
count–返回流中元素的总个数
max–返回流中最大值
min–返回流中最小值


判断personList中的人是否都是成年人:

 final boolean adult = personList.stream().allMatch(p -> p.getAge() >= 18);
 System.out.println("是否都是成年人:" + adult);
 
 final boolean chinaese = personList.stream().allMatch(p -> p.getCountry().equals("中国"));
System.out.println("是否都是中国人:" + chinaese);

max min
final Optional<Person> maxAge = personList.stream().max((p1, p2) -> p1.getAge().compareTo(p2.getAge()));
System.out.println("年龄最大的人信息:" + maxAge.get());

final Optional<Person> minAge = personList.stream().min((p1, p2) -> p1.getAge().compareTo(p2.getAge()));
System.out.println("年龄最小的人信息:" + minAge.get());

11.分组:


static Map<Integer,List<Player>> parallelStreamSort(List<Player> players){
return players.parallelStream().filter((Player p) -> p.getMoney() > 20).collect(Collectors.groupingBy(Player::getSex));
}
/**
* 利用stream筛选余额大于20的玩家,并根据性别进行分组(顺序处理)
* @param players
* @return
*/
static Map<Integer,List<Player>> streamSort(List<Player> players){
return players.stream().filter((Player p) -> p.getMoney() > 20).collect(Collectors.groupingBy(Player::getSex));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值