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

一道小小的題目,濕胸我總結(jié)這么多,是不是太啰嗦了。
當(dāng)然了,這都是一些些小的建議。
不積跬步,無(wú)以至千里啊。百層高臺(tái)起于壘土的嘛。這道理都簡(jiǎn)單,但是實(shí)現(xiàn)卻不易。
以上這篇在java8中使用流區(qū)分質(zhì)數(shù)與非質(zhì)數(shù)詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java導(dǎo)出數(shù)據(jù)庫(kù)的全部表到excel
這篇文章主要為大家詳細(xì)介紹了java導(dǎo)出數(shù)據(jù)庫(kù)的全部表到excel的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03
Java接口的作用_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java接口的作用,涉及到接口的規(guī)范相關(guān)知識(shí),需要的的朋友參考下2017-04-04
Java多線程程序中synchronized修飾方法的使用實(shí)例
synchronized關(guān)鍵字主要北用來(lái)進(jìn)行線程同步,這里我們主要來(lái)演示Java多線程程序中synchronized修飾方法的使用實(shí)例,需要的朋友可以參考下:2016-06-06
SpringBoot結(jié)合Maven項(xiàng)目依賴版本沖突問(wèn)題解決
本文主要介紹了SpringBoot結(jié)合Maven項(xiàng)目依賴版本沖突問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
單例模式垃圾回收_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了單例模式垃圾回收的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
ThreadLocal簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了ThreadLocal簡(jiǎn)介的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

