0

Getting a redundant null check error in the following code block. Can someone help me refactor it:

private Date pickRecent(Date d1, Date d2, Date d3, Date crd) {
        logger.debug("d1: " + d1 + " d2: " + d2 + " d3: " + d3 + " crd: " + crd);
        // all null
        if (d1 == null && d2 == null && d3 == null) return crd;
        logger.debug("through all");
        // two null
        if (d1 == null && d2 == null) return d3;
        if (d1 == null && d3 == null) return d2;
        if (d2 == null && d3 == null) return d1;
        logger.debug("through two");
        // one null
        if (d1 == null) if (d2.after(d3)) return d2; else return d3;
        if (d2 == null) if (d1.after(d3)) return d1; else return d3;
        if (d3 == null) if (d1.after(d2)) return d1; else return d2;
        logger.debug("through one");
        // none null
        if (d1.after(d2) && d1.after(d3)) return d1;
        if (d2.after(d1) && d2.after(d3)) return d2;
        if (d3.after(d1) && d3.after(d2)) return d3;
        if (d1.equals(d2) && d1.equals(d3)) return d1;
        logger.debug("through none");
        return null;
    }
raptor
  • 1
  • 1
  • 1
    `return Stream.of(d1, d2, d3).filter(Objects::nonNull).max(Comparator.naturalOrder()).orElse(crd)`, or something like that, would be much easier. – Andy Turner Aug 18 '20 at 20:46

2 Answers2

0

Here's one possible solution...

import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;

public class RecentDate
{
  public static void main(String[] args)
  {
    System.out.println(pickRecent(new Date(1, 1, 1), new Date(2, 2, 2), new Date(3, 3, 3), new Date(4, 4, 4)));
    System.out.println(pickRecent(null, null, null));
  }
  
  private static Date pickRecent(Date...dates)
  {
    return Arrays.stream(dates).filter(d -> d != null).max(Comparator.naturalOrder()).orElse(null);
  }
}

Output:

Wed May 04 00:00:00 CST 1904
null
Tim Hunter
  • 826
  • 5
  • 10
0
public static Date pickRecent(Date one, Date two, Date three, Date crd) {
    Set<Date> unique = new TreeSet<>(Comparator.reverseOrder());

    if (one != null)
        unique.add(one);
    if (two != null)
        unique.add(two);
    if (three != null)
        unique.add(three);

    return unique.size() == 1 ? unique.iterator().next() : crd;
}
Oleg Cherednik
  • 17,377
  • 4
  • 21
  • 35