How to return multiple objects from a Java method?

前端 未结 25 3129
眼角桃花
眼角桃花 2020-11-21 23:55

I want to return two objects from a Java method and was wondering what could be a good way of doing so?

The possible ways I can think of are: return a HashMap<

25条回答
  •  故里飘歌
    2020-11-22 00:39

    You may use any of following ways:

    private static final int RETURN_COUNT = 2;
    private static final int VALUE_A = 0;
    private static final int VALUE_B = 1;
    private static final String A = "a";
    private static final String B = "b";
    

    1) Using Array

    private static String[] methodWithArrayResult() {
        //...
        return new String[]{"valueA", "valueB"};
    }
    
    private static void usingArrayResultTest() {
        String[] result = methodWithArrayResult();
        System.out.println();
        System.out.println("A = " + result[VALUE_A]);
        System.out.println("B = " + result[VALUE_B]);
    }
    

    2) Using ArrayList

    private static List methodWithListResult() {
        //...
        return Arrays.asList("valueA", "valueB");
    }
    
    private static void usingListResultTest() {
        List result = methodWithListResult();
        System.out.println();
        System.out.println("A = " + result.get(VALUE_A));
        System.out.println("B = " + result.get(VALUE_B));
    }
    

    3) Using HashMap

    private static Map methodWithMapResult() {
        Map result = new HashMap<>(RETURN_COUNT);
        result.put(A, "valueA");
        result.put(B, "valueB");
        //...
        return result;
    }
    
    private static void usingMapResultTest() {
        Map result = methodWithMapResult();
        System.out.println();
        System.out.println("A = " + result.get(A));
        System.out.println("B = " + result.get(B));
    }
    

    4) Using your custom container class

    private static class MyContainer {
        private final M first;
        private final N second;
    
        public MyContainer(M first, N second) {
            this.first = first;
            this.second = second;
        }
    
        public M getFirst() {
            return first;
        }
    
        public N getSecond() {
            return second;
        }
    
        // + hashcode, equals, toString if need
    }
    
    private static MyContainer methodWithContainerResult() {
        //...
        return new MyContainer("valueA", "valueB");
    }
    
    private static void usingContainerResultTest() {
        MyContainer result = methodWithContainerResult();
        System.out.println();
        System.out.println("A = " + result.getFirst());
        System.out.println("B = " + result.getSecond());
    }
    

    5) Using AbstractMap.simpleEntry

    private static AbstractMap.SimpleEntry methodWithAbstractMapSimpleEntryResult() {
        //...
        return new AbstractMap.SimpleEntry<>("valueA", "valueB");
    }
    
    private static void usingAbstractMapSimpleResultTest() {
        AbstractMap.SimpleEntry result = methodWithAbstractMapSimpleEntryResult();
        System.out.println();
        System.out.println("A = " + result.getKey());
        System.out.println("B = " + result.getValue());
    }
    

    6) Using Pair of Apache Commons

    private static Pair methodWithPairResult() {
        //...
        return new ImmutablePair<>("valueA", "valueB");
    }
    
    private static void usingPairResultTest() {
        Pair result = methodWithPairResult();
        System.out.println();
        System.out.println("A = " + result.getKey());
        System.out.println("B = " + result.getValue());
    }
    

提交回复
热议问题