クリスティアン・マテイ:
public static void main(String[] args) {
System.out.println(hasPairWithSum(new int[] { 12, 4, 3, 4, 1, 7 }, 9));
System.out.println(hasPairWithSum2(new int[] { 12, 4, 3, 4, 1, 7 }, 9));
System.out.println(hasPairWithSum3(new int[] { 12, 4, 3, 4, 1, 7 }, 9));
}
public static boolean hasPairWithSum(int[] intArray, int sum) {
int len = intArray.length;
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (intArray[i] + intArray[j] == sum) {
return true;
}
}
}
return false;
}
public static boolean hasPairWithSum2(int[] intArray, int sum) {
HashSet<Integer> mySet = new HashSet<Integer>();
int len = intArray.length;
for (int i = 0; i < len; i++) {
if (mySet.contains(intArray[i])) {
return true;
}
mySet.add(sum - intArray[i]);
}
return false;
}
public static boolean hasPairWithSum3(int[] intArray, int sum) {
HashSet<Integer> mySet = new HashSet<Integer>();
int len = intArray.length;
return IntStream.range(0, len).mapToObj(i -> {
if (mySet.contains(intArray[i])) {
return true;
}
mySet.add(sum - intArray[i]);
return false;
}) != null;
}
マキシムポポフ:
ストリームはJavaで怠け者です。あなたは、ストリームを評価開始のための端末操作を呼び出す必要があります
端末操作ではなく、それは常にストリーム<ブール>オブジェクトを返し、それが常にNOT NULL "<U>ストリーム<U> mapToObj(IntFunctionはマッパー<?U延び>)"。
あなたは、このようにコードを変更することができますが、私はそれがストリームを使用するための良い方法だとわかりません。
public static boolean hasPairWithSum3(int[] intArray, int sum) {
HashSet<Integer> mySet = new HashSet<Integer>();
int len = intArray.length;
return IntStream.range(0, len).anyMatch(i -> {
if (mySet.contains(intArray[i])) {
return true;
}
mySet.add(sum - intArray[i]);
return false;
});
}