مساله:
کار شما در این کاتا پیاده سازی یک تابع تفاوت است که یک لیست را از لیست دیگر کم کرده و نتیجه را برمی گرداند.
باید مقادیر در لیست a را که در لیست b وجود دارد با رعایت ترتیب حذف کند.
Kata.arrayDiff(new int[] {1, 2}, new int[] {1}) => new int[] {2}
اگر مقداری در b وجود داشته باشد باید تمام مشترکات آن از لیست دیگر حذف شود.
Kata.arrayDiff(new int[] {1, 2, 2, 2, 3}, new int[] {2}) => new int[] {1, 3}
Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.
It should remove all values from list a, which are present in list b keeping their order.
Kata.arrayDiff(new int[] {1, 2}, new int[] {1}) => new int[] {2}
If a value is present in b, all of its occurrences must be removed from the other:
Kata.arrayDiff(new int[] {1, 2, 2, 2, 3}, new int[] {2}) => new int[] {1, 3}
راه حل ها (Solutions):
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Kata { public static int[] arrayDiff(int[] a, int[] b) { List<Integer> listA = Arrays.stream(a).boxed().collect(Collectors.toList()); List<Integer> listB = Arrays.stream(b).boxed().collect(Collectors.toList()); listA.removeAll(listB); return listA.stream().mapToInt(e -> e).toArray(); } }
import java.util.stream.IntStream; public class Kata { public static int[] arrayDiff(int[] a, int[] b) { return IntStream.of(a).filter(x -> IntStream.of(b).noneMatch(y -> y == x)).toArray(); } }
import java.util.ArrayList; import java.util.List; public class Kata { public static int[] arrayDiff(int[] a, int[] b) { List<Integer> list = new ArrayList<>(); loop: for (int num : a) { for (int i : b) if (num == i) continue loop; list.add(num); } return list.stream().mapToInt(Integer::intValue).toArray(); } }
import java.util.Arrays; import java.util.Objects; public class Kata { public static int[] arrayDiff(int[] a, int[] b) { if(a == null || b == null) return a; return Arrays.stream(a) .filter(elemA -> Arrays.stream(b).noneMatch(elemB -> Objects.equals(elemA,elemB))) .toArray(); } }
import org.apache.commons.lang3.ArrayUtils; import java.util.Arrays; public class Kata { public static int[] arrayDiff(int[] a, int[] b) { for (int i = 0; i < b.length; i++) a = ArrayUtils.removeAllOccurences(a, b[i]); return a; } }
import java.util.ArrayList; public class Kata { public static int[] arrayDiff(int[] a, int[] b) { // Your code here ArrayList<Integer> output = new ArrayList<>(); for (int i = 0; i < a.length; i++) { boolean flag = false; for (int j = 0; j < b.length; j++) { if (a[i] == b[j]) { flag = true; break; } } if (!flag) { output.add(a[i]); } } int[] ret = new int[output.size()]; for(int i = 0;i < ret.length;i++) ret[i] = output.get(i); return ret; } }
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Kata { public static int[] arrayDiff(int[] a, int[] b) { List<Integer> b1 = Arrays.stream(b).boxed().collect(Collectors.toList()); return Arrays.stream(a).filter(i -> !b1.contains(i)).toArray(); } }