Java8新特性 Stream() 數據操作


定義了一個實體類,Apple.java

public class Apple { private Integer id; private String name; private Double money; private Integer num; /**狀態: 1: 正常 2: 非正常**/
    private String status; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Apple(Integer id, String name, Double money, Integer num, String status) { this.id = id; this.name = name; this.money = money; this.num = num; this.status = status; } @Override public String toString() { return "Apple{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                ", num=" + num +
                '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } }

Java新特性操作部分

import java.util.*; import java.util.function.Supplier; import java.util.stream.Collectors; import static java.util.Comparator.comparingLong; import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toCollection; /** * * @author 王立朝 * @date 2020-8-30 * @description: */
public class Java8Test { /** * 使用java7進行排序 * * @param names */
    public void sortUsingJava7(List<String> names) { Collections.sort(names, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); for (String s : names) { System.out.println("java7排序后的結果為: " + s); } } /** * 使用java8進行排序 * * @param names */
    public void sortUsingJava8(List<String> names) { Collections.sort(names, (s1, s2) -> s1.compareTo(s2)); System.out.println("java 8 的語法"); for (String s : names) { System.out.println("java7排序后的結果為: " + s); } } /** * 測試java7 和 java 8 的 排序 */
    public void testJava7And8Sort() { List<String> nameList = new ArrayList<>(); nameList.add("Java"); nameList.add("Phyton"); nameList.add("JavaScript"); nameList.add("VUE"); nameList.add("BootStrap"); System.out.println("遍歷之前的數據順序為: "); Java8Test java8Test1 = new Java8Test(); nameList.forEach(e -> System.out.println(e)); java8Test1.sortUsingJava7(nameList); java8Test1.sortUsingJava8(nameList); } /** * java 1.8 創建對象 * * @param supplier * @return
     */
    public static Java8Test create(final Supplier<Java8Test> supplier) { return supplier.get(); } /** * java8 對數據的處理 */
    public ArrayList<Apple> getData() { ArrayList<Apple> apples = new ArrayList<>(); Apple apple1 = new Apple(1, "蘋果1", 1.2, 10, "true"); Apple apple12 = new Apple(1, "蘋果2", 1.1, 20, "false"); Apple apple2 = new Apple(2, "香蕉", 6.2, 5, "falseMe"); Apple apple4 = new Apple(4, "香蕉", 2.2, 10, "true"); Apple apple3 = new Apple(3, "荔枝", 0.5, 5, "false"); apples.add(apple1); apples.add(apple12); apples.add(apple2); apples.add(apple3); apples.add(apple4); return apples; } /** * 根據ID 進行分組,ID 相同的放到一起 * * @param apples */
    public void groupById(ArrayList<Apple> apples) { // List以ID 分組,然后放到Map 中
        Map<Integer, List<Apple>> groupby = apples.stream().collect(Collectors.groupingBy(Apple::getId)); System.out.println(groupby); } /** * list 轉換為Map, * 注意: Collectors.toMap() 方法中,如果key有重復,會報錯Duplicate key * apple1,apple12的id都為1。可以用 (k1,k2)->k1 來設置,如果有重復的key,則保留key1,舍棄key2 * * @param apples */
    public void listToMap(ArrayList<Apple> apples) { Map map = apples.stream().collect(Collectors.toMap(Apple::getId, a -> a, (k1, k2) -> k1)); for (Object key : map.keySet()) { System.out.println("key= " + key + " and value= " + map.get(key)); } } /** * 對數據進行過濾 * * @param apples */
    public void filterData(ArrayList<Apple> apples) { List<Apple> list = apples.stream().filter(a -> a.getName().equals("香蕉")).collect(Collectors.toList()); Apple apple = null; for (int i = 0; i < list.size(); i++) { apple = list.get(i); System.out.println("過濾香蕉的數據為: " + apple); } } /** * 按照某一個屬性進行求和 * * @param apples */
    public void getSumByProperty(ArrayList<Apple> apples) { int sum = apples.stream().mapToInt(Apple::getId).sum(); System.out.println("統計的結果為: " + sum); } /** * 計算流中的最大值和最小值 * TODO 暫時還不確定這個方法到底是怎么用 */
    public void getMaxAndMinVal() { /*Optional maxDish = Dish.menu.stream(). collect(Collectors.maxBy(Comparator.comparing(Dish::getCalories))); maxDish.ifPresent(System.out::println); Optional minDish = Dish.menu.stream(). collect(Collectors.minBy(Comparator.comparing(Dish::getCalories))); minDish.ifPresent(System.out::println);*/ } /** * 對數據進行去重 * * @param apples */
    public void distinic(ArrayList<Apple> apples) { // 根據id去重
        List unique = apples.stream().collect( collectingAndThen( toCollection(() -> new TreeSet<>(comparingLong(Apple::getId))), ArrayList::new) ); System.out.println("去重前數據遍歷結果為: "); apples.forEach(s -> { System.out.println("去重前遍歷的結果為: " + s); }); System.out.println("去重后數據遍歷結果"); unique.forEach(s -> { System.out.println("去重后遍歷的結果為: " + s); }); } /** * TODO: 對數據進行操作 * TODO: 查找與匹配數據 * TODO: 1、檢查是否匹配所有元素 allMatch * TODO: 2、檢查是否至少匹配一個元素 anyMatch * TODO: 3、檢查是否沒有匹配的元素 noneMatch * TODO: 4、返回第一個元素 findFirst * TODO: 5、返回當前流中的任意一個元素 findAny * TODO: 6、返回流中元素的總個數 count * TODO: 7、返回流中的最大值 max * TODO: 8、返回流中的最小值 min **/
    public void testStreamApi(ArrayList<Apple> apples) { // 判斷 列表里面的值是否都是true allMatch
        boolean aTrue = apples.stream().allMatch((e) -> e.getStatus().equals("true")); System.out.println("判斷 列表里面的值是否都是true-->" + aTrue); boolean anyMatch = apples.stream().anyMatch((e) -> e.getStatus().equals("false")); System.out.println("判斷列表里面的值是否至少匹配一個元素->" + anyMatch); boolean noneMatch = apples.stream().noneMatch((e) -> e.getStatus().equals("false")); System.out.println("判斷列表里面的值是否一個都沒有匹配到->" + noneMatch); Optional<Apple> first = apples.stream().sorted(Comparator.comparing(Apple::getMoney)).findFirst(); System.out.println("獲取列表中的第一個元素(先根據 money進行排序,然后)->" + first); Optional<Apple> findAny = apples.stream().filter((e) -> e.getStatus().equals("false")).findAny(); System.out.println("獲取列表中任意一個元素->" + findAny); long listCount = apples.stream().count(); System.out.println("獲取列表的數量->" + listCount); long falseCount = apples.stream().filter((e) -> e.getStatus().equals("false")).count(); System.out.println("查詢列表中 狀態是false 的總共有幾個 ->" + falseCount); Optional<Double> max = apples.stream().map(Apple::getMoney).max(Double::compareTo); System.out.println("查詢money最大的 ->" + max); Optional<Apple> min = apples.stream().sorted(Comparator.comparingDouble(Apple::getMoney)) .min(Comparator.comparingInt(Apple::getNum)); System.out.println("查詢 num 最小的值-> " + min); } public static void main(String[] args) { // 使用java8 來創建一個對象
        Java8Test java8Test = Java8Test.create(Java8Test::new); java8Test.testJava7And8Sort(); // 使用java8 對數據進行處理 // 1.對數據進行分組
 java8Test.groupById(java8Test.getData()); // 2.對list 類型的數據轉換為Map類型
 java8Test.listToMap(java8Test.getData()); // 3.讀數據進行過濾
 java8Test.filterData(java8Test.getData()); // 4、對數據按照某一個屬性進行求和
 java8Test.getSumByProperty(java8Test.getData()); //5、對數據去重
 java8Test.distinic(java8Test.getData()); // 6、檢查list集合中status的值是否都是true
 java8Test.testStreamApi(java8Test.getData()); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM