Path: csiph.com!aioe.org!.POSTED.xV/6gj+grSZn0+TB/DGTcw.user.gioia.aioe.org!not-for-mail From: Graeme Geldenhuys Newsgroups: comp.lang.java.programmer Subject: Interview question - better solution for MergePurgeAndReverseOrder() Date: Fri, 29 Mar 2019 15:01:01 +0000 Organization: Aioe.org NNTP Server Lines: 82 Message-ID: NNTP-Posting-Host: xV/6gj+grSZn0+TB/DGTcw.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 Content-Language: en-GB X-Mozilla-News-Host: news://nntp.aioe.org:119 X-Notice: Filtered by postfilter v. 0.9.2 Xref: csiph.com comp.lang.java.programmer:38824 Hi, I recently attended a Java developer interview and had to implement the MergePurgeAndReverseSort() method. I managed to complete it and afterwards wrote some unit tests to confirm that it works. But is there a better way to implement it, or did I do an okay job about it. I can post the unit tests too if that might help. Any feedback would be very much appreciated. Regards, Graeme *********************************************** public class Main { public static void main(String[] args) { Integer[] v1 = new Integer[] { 1, 2, null, 3 }; Integer[] v2 = new Integer[] { 1, 2, 3, 4 }; int[] arr = Util.MergePurgeAndReverseSort(v1, v2, true); for (int i = 0; i < arr.length; i++) System.out.println(arr[i]); } } *********************************************** import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class Util { /* * [x] Merge the two arrays * [x] remove duplicates * [x] remove NULL's * [x] sort in reverse order * [x] return as an int[] array */ public static int[] MergePurgeAndReverseSort(Integer[] values1, Integer[] values2, boolean reverse) { // merge arrays Integer[] v1andv2 = new Integer[values1.length + values2.length]; System.arraycopy(values1, 0, v1andv2, 0, values1.length); System.arraycopy(values2, 0, v1andv2, values1.length, values2.length); // Use a set to remove duplicates Set intSet = new HashSet<>(); for (Integer item : v1andv2) { // We could check for null's here too, or handle it separately as shown below if (item != null) intSet.add(item); } // sort in reverse order List lst; if (reverse) lst = intSet.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList()); else lst = intSet.stream().sorted().collect(Collectors.toList()); // unbox data int[] n = lst.stream().mapToInt(Integer::intValue).toArray(); return n; } } ***********************************************