Iterate List based on condition Set Values to another object

Viewed 57

Iterate List based on condition Set Values to another object using Java 8?

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        // TODO: Condition is => Only if id = 100, then assign internalMarks to (externalMarks + internalMarks); to 103
        // So internalMarks = 0 and externalMarks = 500+250=750
        List<Employee> employees = Arrays.asList(
                new Employee(100, 500, "John", 250),
                new Employee(101, 500, "Jane", 250),
                new Employee(102, 500, "Jack", 250),
                new Employee(103, 500, "Mike", 250)
                );
        
        List<Employee> newList = new ArrayList<>();
        employees.stream().forEach(e -> {
            if(e.getId() == 100 && e.getId() > 0) {
                e.setExternalMark(0);
                newList.add(e);
            }else {
                newList.add(e);
            }
        });
        System.out.println(newList);
    }

    static class Employee {
        private int id;
        private int internalMark;
        private String name;
        private int externalMark;

        public Employee() {
        }

        public Employee(int id, int internalMark, String name, int externalMark) {
            super();
            this.id = id;
            this.internalMark = internalMark;
            this.name = name;
            this.externalMark = externalMark;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public int getInternalMark() {
            return internalMark;
        }

        public void setInternalMark(int internalMark) {
            this.internalMark = internalMark;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getExternalMark() {
            return externalMark;
        }

        public void setExternalMark(int externalMark) {
            this.externalMark = externalMark;
        }

        @Override
        public String toString() {
            return "Employee [id=" + id + ", internalMark=" + internalMark + ", name=" + name + ", externalMark="
                    + externalMark + "]";
        }

        
    }
}
1 Answers
//Condition is => Only if id = 100, then assign internalMarks to (externalMarks + internalMarks); to 103
// So internalMarks = 0 and externalMarks = 500+250=750

From your condition, as its slighlty unclear that externalMarks should be changes for Id=100 or Ids 100 to 103, means for all Employees

Take one scenario, where externalMarks should be changes for id = 100, then solution can be

List<Employee> newList1 =  employees.stream()
.map(e-> {
    if(e.getId() == 100) {
        e.setExternalMark(e.getInternalMark()+e.getExternalMark());
        e.setInternalMark(0);
    }
    return e;
})
.collect(Collectors.toList());

For other scenario, where externalMarks should be changes for id = 100 to 103, then solution can be

List<Employee> newList1 =  employees.stream()
.map(e-> {
    e.setExternalMark(e.getInternalMark()+e.getExternalMark());
    e.setInternalMark(0);
    return e;
})
.collect(Collectors.toList());
Related