>

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)
    }

}
View Code
复制代码

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)
    }

}
View Code
复制代码

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

引入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)
    }

}
复制代码

 

 

 

参考文章:

https://blog.csdn.net/qq_34706514/article/details/124427524

posted @   字节悦动  阅读(1157)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示

目录导航