¿Cómo encontrar el salario mínimo de la lista de empleados en Java?
Frecuentes
Visto 9,524 equipos
1
Hola, tengo dos clases Empleado y Departamento. Mi función principal lee un archivo .txt lleno de nombres de empleados, salarios, departamentos y puestos. Mi clase Employee es solo getters y setters. Se hace una lista de arraylists para representar a los empleados y no estoy seguro de cómo encontraría el salario mínimo de cada uno de los departamentos. Para encontrar el salario máximo hice esto en mi clase de departamento.
public class Department {
String dept;
List<Employee> employees;
double minSal;
double maxSal;
public void addEmployee(Employee emp){
maxSal = 0.0;
if (maxSal < emp.getSalary()) {
maxSal = emp.getSalary();
}
pero no estoy seguro de cómo obtener el salario mínimo. Mi idea era obtener el salario de uno de los empleados de cada departamento y usarlo como punto de partida para
if (minSal > emp.getSalary()) {
minSalary = emp.getSalary();
}
Pero me di cuenta de que no tenía idea de qué hacer. ¿Puedo obtener ayuda con esto?
5 Respuestas
2
if (employees.isEmpty() {
return null; // No minimum salary available.
}
int minSalary = Integer.MAX_INT;
for (Employee e : employees) {
minSalary = Math.min(minSalary, e.getSalary();
}
return minSalary;
Respondido 25 Abr '13, 02:04
2
Parece que desea una lista de los salarios más bajos para cada departamento y parece que las otras respuestas solo le dan el salario más bajo en todos los departamentos. Si no me equivoco y desea el salario bajo por departamento, probablemente desee recorrer la lista y colocarlos en un mapa por departamento, así:
public Map<String, Double> getLowSalaries(List<Employee> employees) {
Map<String, Double> lowSalaries = new HashMap<String, Double>();
for(Employee employee : employees) {
Double lowSalaryForDept = lowSalaries.get(employee.getDept());
if(lowSalaryForDept == null || lowSalaryForDept < employee.getSalary()) {
lowSalaries.put(employee.getDept(), employee.getSalary());
}
}
return lowSalaries;
}
Respondido 25 Abr '13, 03:04
0
Hay un número especial, Double.POSITIVE_INFINITY
, que es mayor que cualquier número representable con double
. Puede usarlo como punto de partida para búsquedas de un mínimo:
double minSalary = Double.POSITIVE_INFINITY;
...
if (minSal > emp.getSalary()) {
minSalary = emp.getSalary();
}
Otro truco común es establecer minSalary
al primer elemento de una lista y luego comience a buscar desde el segundo elemento.
Respondido 25 Abr '13, 02:04
¿Cómo hago para configurarlo en el primer elemento de una lista? Así lo estaba pensando pero no sabía hacerlo. - user1869703
@ user1869703 Puedes hacerlo en un bucle, no en addEmployee
. Sin embargo, las POSITIVE_INFINITY
el truco debería funcionar. También puedes usar Double
en lugar de double
, en cuyo caso puede establecer inicialmente minSal
a null
. - Serguéi Kalinichenko
0
Aquí hay una variación usando un Iterator
:
public double minSalary(List<Employee> employees) {
if (employees == null || employees.isEmpty()) {
throw new IllegalArgumentException();
}
Iterator<Employee> iterator = employees.iterator();
double min = iterator.next();
while (iterator.hasNext()) {
min = Math.min(min, iterator.next().getSalary());
}
return min;
}
Respondido 25 Abr '13, 03:04
los tipos primitivos no pueden ser nulos. Probablemente sería mejor volver Double.NaN
o -1. - Acercándose Oscuridad
Tienes razón, lo actualicé para lanzar una excepción, pero tus sugerencias también son buenas. Devolviendo un Double
funcionaría también y luego un null
se puede devolver - Ed por favor
0
List<Employee> empArr=new ArrayList<>();
empArr.add(new Employee("John", 1,100000));
empArr.add(new Employee("Tom", 2,560000));
empArr.add(new Employee("Sam", 3,4500));
empArr.add(new Employee("David", 4,40000));
int minSalary= empArr.stream().map(e->e.getSalary()).min(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
}).get();
System.out.println(minSalary);
Respondido 29 Jul 22, 20:07
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java or haz tu propia pregunta.
¿Por qué no usar un ciclo for para iterar a través de ArrayList buscando el salario más bajo a medida que realiza el ciclo? - Hovercraft Full Of Eels
Vi que se me preguntó antes, pero realmente no entendía cómo usarlo para mi caso y no estoy seguro de cómo usar un ciclo para iterar a través de la lista de arreglos. Acabo de empezar Java recientemente. - user1869703
Debe ir a los tutoriales de Java y leer sobre el uso de bucles for. Una habilidad que deberá dominar para aprender Java es cómo aprender cosas por su cuenta. Los tutoriales de Java son una maravillosa recurso para esto. Google puede ayudarte a encontrarlo. - Hovercraft Full Of Eels