這位大佬寫的不錯,每次不會都會去看看https://www.cnblogs.com/shenlanzhizun/p/6027042.html 另外補充一些Java8騷操作 BigDecimal求和 博客中位置:3.2 歸約:reduce(其實已經有了int類型的求和,我寫個這個類型的吧) 另外提一點 ...
這位大佬寫的不錯,每次不會都會去看看https://www.cnblogs.com/shenlanzhizun/p/6027042.html
另外補充一些Java8騷操作
BigDecimal求和
博客中位置:3.2 歸約:reduce(其實已經有了int類型的求和,我寫個這個類型的吧)
List<BigDecimal> bigDecimalList = new ArrayList<>(); bigDecimalList.add(BigDecimal.valueOf(0.05)); bigDecimalList.add(BigDecimal.valueOf(0.05)); System.out.println(bigDecimalList.stream().reduce(BigDecimal.ZERO,BigDecimal::add));
結果:0.10
另外提一點,
System.out.println(new BigDecimal(0.05));
結果:0.05000000000000000277555756156289135105907917022705078125
這個寫法,是直接傳入了double類型,輸出的是丟失精度的結果,並不是BigDecimal會丟失精度,是double(具體百度)
所以儘量用 BigDecimal.valueOf()
將list映射為map
博客中位置:3.3 收集:toMap文中提到過,但是沒有例子,實戰中又用的到
借他list一用
//將學生id作為鍵,學生名稱為值
Map<Long, String> collect = students.stream().collect(Collectors.toMap(Student::getId, Student::getName, (k1, k2) -> k1));
//將學生id作為鍵,學生對象為值
Map<Long, Student> studentMap = students.stream().collect(Collectors.toMap(Student::getId, student -> student, (k1, k2) -> k1));
排序
博客中位置:2.1 過濾:其中提到排序sorted(列子有排序欄位類型是int)
//String類型 按照(姓名)自然順序排序 students = students.stream().sorted((s1,s2)->s1.getName().compareTo(s2.getName())).collect(Collectors.toList()); //或者只排序姓名 List<String> stringList = students.stream().map(Student::getName).collect(Collectors.toList()); stringList =stringList.stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList()); //按照時間排序(倒敘) 假設學生對象有創建時間這個欄位 students = students.stream().sorted(Comparator.comparing(Student::getCreateTime).reversed()).collect(Collectors.toList());
歡迎補充批評,另外工作中另外遇到我會補充更新