Java stream 应用实例
@Data
static class Item {
private String name;
private Integer qty;
private BigDecimal jiage;
public Item(String name, Integer qty, BigDecimal jiage){
this.name = name;
this.qty = qty;
this.jiage = jiage;
}
}
public static void main(String[] args) {
List<Item> items = Arrays.asList(
new Item("red", 11, new BigDecimal("9.99")),
new Item("white", 20, new BigDecimal("19.99")),
new Item("green", 12, new BigDecimal("29.99")),
new Item("red", 11, new BigDecimal("29.99")),
new Item("red", 20, new BigDecimal("9.99")),
new Item("black", 6, new BigDecimal("9.99")),
new Item("yellow", 8, new BigDecimal("19.99")),
new Item("white", 25, new BigDecimal("9.99"))
);
Set<String> map = items.stream().map(item -> item.getName()).collect(Collectors.toSet());
System.out.println("map:~~~~~~~~~~"+ JSON.toJSONString(map));
List<Integer> map2 = items.stream().map(item1 -> item1.getQty() + 1).collect(Collectors.toList());
System.out.println("map1:~~~~~~~~~~" + JSON.toJSON(map2));
Map<String, List<Item>> group = items.stream().collect(Collectors.groupingBy(Item::getName));
System.out.println("group:~~~~~~~~~~" + JSON.toJSONString(group));
Map<String, Long> counting = items.stream().collect(Collectors.groupingBy(Item::getName, Collectors.counting()));
System.out.println("counting:~~~~~~~~~~" + counting);
Map<String, Integer> sum = items.stream().collect(Collectors.groupingBy(Item::getName, Collectors.summingInt(Item::getQty)));
System.out.println("sum:~~~~~~~~~~" + sum);
items.stream().forEach(System.out::println);
items = items.stream().filter(item -> item.getQty() > 10).collect(Collectors.toList());
int s = items.stream().mapToInt(Item::getQty).sum();
System.out.println("s:~~~~~~~~~~" + s);
map2 = map2.stream().sorted().collect(Collectors.toList());
System.out.println("map2:~~~~~~~~~~" + JSON.toJSON(map2));
map2 = map2.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
System.out.println("map3:~~~~~~~~~~" + JSON.toJSON(map2));
items = items.stream().sorted(Comparator.comparing(Item::getQty)).collect(Collectors.toList());
System.out.println("items1:~~~~~~~~~~" + JSON.toJSON(items));
items = items.stream().sorted(Comparator.comparing(Item::getQty).reversed()).collect(Collectors.toList());
System.out.println("items2:~~~~~~~~~~" + JSON.toJSON(items));
Double collect = items.stream().collect(Collectors.averagingInt(Item::getQty));
System.out.println("items3:~~~~~~~~~~" + JSON.toJSON(collect));
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
Stream.of(2,6,7,8,0,0,1,2,3,1)
.distinct()
.forEach(e->System.out.println(e));
}
}
运行结果
map:~~~~~~~~~~["red","green","white","black","yellow"]
map1:~~~~~~~~~~[12,21,13,12,21,7,9,26]
group:~~~~~~~~~~{"red":[{"jiage":9.99,"name":"red","qty":11},{"jiage":29.99,"name":"red","qty":11},{"jiage":9.99,"name":"red","qty":20}],"green":[{"jiage":29.99,"name":"green","qty":12}],"white":[{"jiage":19.99,"name":"white","qty":20},{"jiage":9.99,"name":"white","qty":25}],"yellow":[{"jiage":19.99,"name":"yellow","qty":8}],"black":[{"jiage":9.99,"name":"black","qty":6}]}
counting:~~~~~~~~~~{red=3, green=1, white=2, yellow=1, black=1}
sum:~~~~~~~~~~{red=42, green=12, white=45, yellow=8, black=6}
OrderRentBackCarService.Item(name=red, qty=11, jiage=9.99)
OrderRentBackCarService.Item(name=white, qty=20, jiage=19.99)
OrderRentBackCarService.Item(name=green, qty=12, jiage=29.99)
OrderRentBackCarService.Item(name=red, qty=11, jiage=29.99)
OrderRentBackCarService.Item(name=red, qty=20, jiage=9.99)
OrderRentBackCarService.Item(name=black, qty=6, jiage=9.99)
OrderRentBackCarService.Item(name=yellow, qty=8, jiage=19.99)
OrderRentBackCarService.Item(name=white, qty=25, jiage=9.99)
s:~~~~~~~~~~99
map2:~~~~~~~~~~[7,9,12,12,13,21,21,26]
map3:~~~~~~~~~~[26,21,21,13,12,12,9,7]
items1:~~~~~~~~~~[{"jiage":9.99,"qty":11,"name":"red"},{"jiage":29.99,"qty":11,"name":"red"},{"jiage":29.99,"qty":12,"name":"green"},{"jiage":19.99,"qty":20,"name":"white"},{"jiage":9.99,"qty":20,"name":"red"},{"jiage":9.99,"qty":25,"name":"white"}]
items2:~~~~~~~~~~[{"jiage":9.99,"qty":25,"name":"white"},{"jiage":19.99,"qty":20,"name":"white"},{"jiage":9.99,"qty":20,"name":"red"},{"jiage":29.99,"qty":12,"name":"green"},{"jiage":9.99,"qty":11,"name":"red"},{"jiage":29.99,"qty":11,"name":"red"}]
items3:~~~~~~~~~~16.5
-446448133
-698972147
1443156936
386514197
400796694
-2089606968
1029121492
-1984596476
-1864823816
-1003521000