一个方法返回多个值,可以有多种实现方式
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)
    }

}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐