首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >java:函数--返回多个值

java:函数--返回多个值

作者头像
用户7886150
修改2020-12-14 15:29:12
修改2020-12-14 15:29:12
5K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: 用Java返回多个值

在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 

 网上这个问题的解决方法: 

 1、【使用集合类】使用map返回值;这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看。 

 2、【使用引用传递】传入一个引用进去,修改引用的属性值。问题:不实用。 

 3、【使用封装对象】通过泛型构造一个类似python的tuple类,或者构造一个JavaBean,其问题都是“一次性”,觉的不优雅。 

  import java.util.HashMap;import java.util.Map;public class Test {    /**     * 方法1:使用集合类 (Map以外的集合类也可以随意使用)     * 目标:返回一个数组的最大值和最小值     */    public Map<String, Integer> test1(int[] arr) {        Map<String, Integer> map = new HashMap<String, Integer>();        int max = Integer.MIN_VALUE;        int min = Integer.MAX_VALUE;        for (int i = 0; i < arr.length; i++) {            if (arr[i] > max) {                max = arr[i];            }            if (arr[i] < min) {                min = arr[i];            }        }        map.put("max", max);        map.put("min", min);        return map;    }    /**     * 方法2:使用封装对象     * 目标:返回一个数组的最大值和最小值     */    public Result test2(int[] arr) {        Result result = new Result();        int max = Integer.MIN_VALUE;        int min = Integer.MAX_VALUE;        for (int i = 0; i < arr.length; i++) {            if (arr[i] > max) {                max = arr[i];            }            if (arr[i] < min) {                min = arr[i];            }        }        result.setMax(max);        result.setMin(min);        return result;    }    /**     * 方法3:使用引用传递 (不适用基本类型及其封装类和String类型)     * 目标:返回数组长度,同时获取最大值和最小值     */    public int test3(int[] arr, Result result) {        int max = Integer.MIN_VALUE;        int min = Integer.MAX_VALUE;        for (int i = 0; i < arr.length; i++) {            if (arr[i] > max) {                max = arr[i];            }            if (arr[i] < min) {                min = arr[i];            }        }        result.setMax(max);        result.setMin(min);        int total = arr.length;        return total;    }        /**     * 测试main     */    public static void main(String[] args) {        Test t = new Test();        int[] arr = { 1, 2, 3, 4, 5, 6 };                // ----------方法1测试-----------        // Map<String, Integer> map = t.test1(arr);        // System.out.println("max : " + map.get("max"));        // System.out.println("min : " + map.get("min"));        // ----------方法2测试-----------        // Result result = t.test2(arr);        // System.out.println("max : " + result.getMax());        // System.out.println("min : " + result.getMin());        // ----------方法3测试-----------        Result result = new Result();        int total = t.test3(arr, result);        System.out.println("total : " + total);        System.out.println("max : " + result.getMax());        System.out.println("min : " + result.getMin());    }}class Result {    int max;    int min;    // 构造函数    public Result() {        super();    }    // getters/setters(略)} 

 个人解决方案: 

使用EnumMap作为返回值类型,自己定义一个enum,将可能返回的属性名定义为enum取值即可。  

  package com.cy;import java.util.EnumMap;/** * Created by on 2014/7/10. */public interface TestService {    enum UserInfoProperty {        ROOM,CELLPHONE,Name    }    public EnumMap<UserInfoProperty,Object> getUserInfoByName(String name);} 

 实现类  

   public class TestServiceImpl implements TestService {    @Override    public EnumMap<UserInfoProperty, Object> getUserInfoByName(String name) {        EnumMap<UserInfoProperty,Object> retMap = new EnumMap<UserInfoProperty, Object>(UserInfoProperty.class);        retMap.put(UserInfoProperty.ROOM,"0003");        retMap.put(UserInfoProperty.CELLPHONE,"00004");        retMap.put(UserInfoProperty.Name,name);        return retMap;    }} 

  main入口  

   public class App {    public static void main( String[] args )    {        TestService testService = new TestServiceImpl();        String name = "testName";        EnumMap<TestService.UserInfoProperty,Object> userInfo = testService.getUserInfoByName(name);         userInfo.entrySet().iterator();        System.out.println(userInfo.get(TestService.UserInfoProperty.Name));        System.out.println(userInfo.get(TestService.UserInfoProperty.ROOM));        System.out.println(userInfo.get(TestService.UserInfoProperty.CELLPHONE));    }} 

 补充:EnumMap 

     阅读目录 

    什么是EnumMap补充说明简单示例 

    以下内容基于jdk1.7.0_79源码; 

    什么是EnumMap 

    Map接口的实现,其key-value映射中的key是Enum类型; 

    补充说明 

    其原理就是一个对象数组,数组的下标索引就是根据Map中的key直接获取,即枚举中的ordinal值; 

    效率比HashMap高,可以直接获取数组下标索引并访问到元素; 

    简单示例 

    比较简单,源代码就不一一添加注释了,简单地说,就是一个对象数组; 

    这里稍微了解一下怎么使用就好了,下面列出一些方法的调用示例: 

     package com.pichen.collection;import java.util.EnumMap;import java.util.Map;import java.util.Map.Entry;enum Operate{    ADD, UPDATE, DELETE; }public class Main {    public static void main(String[] args) {        Map<Operate, String> map = new EnumMap<Operate, String>(Operate.class);        //put方法        map.put(Operate.ADD, "add operate");        map.put(Operate.UPDATE, "update operate");        map.put(Operate.DELETE, "delete operate");                //重写了toString方法        System.out.println(map);                //size方法        System.out.println(map.size());                System.out.println(map.containsKey(Operate.UPDATE));        System.out.println(map.containsValue("update operate"));        System.out.println(map.get(Operate.DELETE));                //remove        map.remove(Operate.UPDATE);        System.out.println(map);                //key集合        for(Operate operate:map.keySet()){            System.out.print(operate + " ");        }                System.out.println();        //value集合        for(String obj:map.values()){            System.out.print(obj + ",");        }                System.out.println();        //key-value集合        for(Entry<Operate, String> entry:map.entrySet()){            System.out.print(entry.getKey() + ": " + entry.getValue() + ", ");        }    }} 

    输出结果: 

      {ADD=add operate, UPDATE=update operate, DELETE=delete operate}3truetruedelete operate{ADD=add operate, DELETE=delete operate}ADD DELETE add operate,delete operate,ADD: add operate, DELETE: delete operate, 

    来源: http://www.cnblogs.com/chenpi/archive/2016/03/19/5296330.html

    来源:

    http://www.cnblogs.com/beiyeren/p/3835548.html

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档