Java一个方法优雅的返回多个值

一个方法返回多个值,可以有多种实现方式
1.放在bean
2.放在map里面
3.使用commons-lang3工具类,返回2个值用Pair,3个值用Triple

1. 使用map

/**
 * @author liangks
 * @date 2022/4/26
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
class Principal {

    private String name;
}


@Data
@NoArgsConstructor
@AllArgsConstructor
class Student {

    private String name;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Teacher {

    private String name;
}

public class MapTest {

    /**
     * 使用Map来返回多个对象
     *
     * @return
     */
    public static Map<String, Object> init() {
        Map<String, Object> map = new HashMap<>();
        map.put("teacher", new Teacher("老师A"));
        map.put("student", new Student("学生A"));
        map.put("principal", new Principal("校长A"));
        return map;
    }

    // 取值
    public static void main(String[] args) {
        Map<String, Object> init = init();
        System.out.println((Teacher) init.get("teacher"));
        System.out.println((Student) init.get("student"));
        System.out.println((Principal) init.get("principal"));
        // Teacher(name=老师A)
        // Student(name=学生A)
        // Principal(name=校长A)
    }

}

2. 使用bean

/**
 * @author liangks
 * @date 2022/4/26
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
class Principal {

    private String name;
}


@Data
@NoArgsConstructor
@AllArgsConstructor
class Student {

    private String name;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Teacher {

    private String name;
}


@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
class People {

    private Principal principal;
    private Teacher teacher;
    private Student student;
}


public class MapTest {

    /**
     * 使用一个对象来返回多个对象
     */
    public static People init() {
        return new People(new Principal("校长A"), new Teacher("老师A"), new Student("学生A"));
    }

    // 取值
    public static void main(String[] args) {
        People init = init();
        System.out.println(init.getPrincipal());
        System.out.println(init.getTeacher());
        System.out.println(init.getStudent());
        // Principal(name=校长A)
        // Teacher(name=老师A)
        // Student(name=学生A)
    }

}

3. (推荐)使用commons-lang3中的Pair、Triple

  1. 引入commons-lang3
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.ImmutableTriple;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;

/**
 * @author liangks
 * @date 2022/4/26
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
class Principal {

    private String name;
}


@Data
@NoArgsConstructor
@AllArgsConstructor
class Student {

    private String name;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Teacher {

    private String name;
}


public class Test {

    /**
     * 使用Pair来返回2个对象
     */
    public static Pair<Teacher, Student> initTwoObject() {
        return new ImmutablePair<>(new Teacher("老师A"), new Student("学生A"));
    }


    /**
     * 使用Triple来返回3个对象
     */
    public static Triple<Principal, Teacher, Student> initThreeObject() {
        return new ImmutableTriple<>(new Principal("校长A"), new Teacher("老师A"), new Student("学生A"));
    }

    // 取值
    public static void main(String[] args) {
        Pair<Teacher, Student> pair = initTwoObject();
        System.out.println(pair.getLeft());
        System.out.println(pair.getRight());
        // Teacher(name=老师A)
        // Student(name=学生A)

        Triple<Principal, Teacher, Student> triple = initThreeObject();
        System.out.println(triple.getLeft());
        System.out.println(triple.getMiddle());
        System.out.println(triple.getRight());
        // Principal(name=校长A)
        // Teacher(name=老师A)
        // Student(name=学生A)
    }

}
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赛赛liangks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值