在java8中使用流區(qū)分質數與非質數詳解
我就廢話不多說了,大家還是直接看代碼吧~
public class PrimeTest {
public static void main(String[] args) {
Map<Boolean, List<Integer>> collect = IntStream.rangeClosed(2, 100).boxed().collect(partitioningBy(PrimeTest::isPrime));
System.out.println(collect.get(true));
System.out.println(collect.get(false));
}
private static boolean isPrime(int endNum) {
// 一個優(yōu)化就是僅測試小于等于待測數平方根的因子
int sqrt = (int)Math.sqrt(endNum);
// 如果待測數字不能被流中任何數字整除則返回true
return IntStream.rangeClosed(2, sqrt).noneMatch(e -> endNum % e == 0);
}
}
補充知識:Java 求1-100以內的所有素數,判斷一個數是不是素數。Java代碼實現附測試結果圖
質數(prime number)又稱素數,有無限個。
質數定義為在大于1的自然數中,除了1和它本身以外不再有其他因數的數稱為質數。
小師弟問了我個這么個聯系題,雖然看似簡單,但是,大家都覺得簡單的東西,沒必要分享的話,那初學者,不是很痛苦嗎?
所以,我就給小師弟示范了一下。方便初學者,看看怎么寫代碼。
代碼內部的細節(jié)(都是針對沒開始工作,或者剛剛工作的哥們):
1,模塊化思想。
先拆分需求,本來讓你求1-100以內的素數,你不能上來就干,先拆分先考慮怎么確定一個數是不是素數,然后再復用到所有。
不能把方法堆到一起,不然怎么復用代碼。
2,注意注釋。
就算是自己的測試代碼,你好歹也寫個注釋,這樣即使過了三個月,再看代碼,也是分分鐘就能明白。不要覺得簡單,就懶得注釋
就算參數的注釋省略了,但是你這個方法的作用還是得說明一下。
好像聽說過:
寫的好的代碼,三個月后,回頭看,還能看懂,還知道是自己寫的,而不是,哇,這是我寫的代碼嗎!?。?!
3,注意參數命名。
從類名到方法名,再到變量名,都不能隨意取名,叫個a,b,c,d,啥的,太隨意了,老師講課這么干,為了省事,少敲幾下鍵盤。
但是,新手們,還是從最基礎的地方做起吧,這樣你出來到項目上,就不會取一些笑掉大牙的命名啦。
關于這個命名,不要嫌棄他長,重點是意思清楚明白。見名知意。是最好的。
4,代碼格式化。
一些新人,包括老師,以及一些工作了些年的從業(yè)人員,他們可能就沒有這個格式化代碼的習慣。
只要你養(yǎng)成習慣了,這個就不用別人說,你自己寫完就會format一下的。而且,這么一整,你的代碼看著也是干凈整潔。
看著就舒爽。
下面看代碼吧:
package com.lxk.test;
import java.util.ArrayList;
import java.util.List;
/**
* 求1-100的素數測試
* <p>
* Created by lxk on 2017/3/2
*/
public class PrimeNumberTest {
public static void main(String[] args) {
int n = 100;
System.out.println(getPrimeNumberToN(n));
}
/**
* 得到1到n之間的素數,存到一個ArrayList集合
*/
private static List<Integer> getPrimeNumberToN(int n) {
List<Integer> result = new ArrayList<>();
for (int i = 1; i < n + 1; i++) {
if (numberIsPrime(i)) {
result.add(i);
}
}
return result;
}
/**
* 判斷一個數是不是素數:只能被1和本身整除
* <p>
* 說明:從2開始除,不需要到n,也就是循環(huán)條件是 < n 就可以,這之間只要被整除了,那么他就不是素數了
*/
private static boolean numberIsPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
執(zhí)行結果圖:

一道小小的題目,濕胸我總結這么多,是不是太啰嗦了。
當然了,這都是一些些小的建議。
不積跬步,無以至千里啊。百層高臺起于壘土的嘛。這道理都簡單,但是實現卻不易。
以上這篇在java8中使用流區(qū)分質數與非質數詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于@RestControllerAdvice與@ControllerAdvice的區(qū)別說明
這篇文章主要介紹了@RestControllerAdvice與@ControllerAdvice的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
基于Pinpoint對SpringCloud微服務項目實現全鏈路監(jiān)控的問題
這篇文章主要介紹了基于Pinpoint對SpringCloud微服務項目實現全鏈路監(jiān)控的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02
SpringCloud之服務注冊與發(fā)現Spring Cloud Eureka實例代碼
這篇文章主要介紹了SpringCloud之服務注冊與發(fā)現Spring Cloud Eureka實例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
利用SpringMVC接收復雜對象和多個文件(前端使用JQuery)
這篇文章主要介紹了利用SpringMVC接收復雜對象和多個文件(前端使用JQuery),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10

