如何用 java 中的流替换 for 循环
How to replace for loop with streams in java
class Checker{
void CheckingNameFromDeptCode(LinkedList<Employee1> empObj, String deptID)
{
for (int i = 0; i < empObj.size(); i++) {
if (empObj.get(i).getDeptID().equals(deptID)) {
System.out.println(empObj.get(i).getEmpName());
}
}
}
}
这是我创建的方法,用于检查输入的部门列表中的员工。
但是有人告诉我在 java 8 中使用 streams/lambda 进行迭代,而不是我使用的好旧的 for 循环。
下面是主要方法
import java.util.*;
public class Manager{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
LinkedList<Employee1> employeeObj = new LinkedList<Employee1>();
Checker empBusObj = new Checker();
employeeObj.add(new Employee1("Souvik", "D1", "Development", "L1", "Kolkata"));
employeeObj.add(new Employee1("Anirban", "D2", "HR", "L2", "Bangalore"));
employeeObj.add(new Employee1("Joydeep", "D3", "Design", "L3", "Delhi"));
employeeObj.add(new Employee1("Rakesh", "D2", "HR", "L4", "Pune"));
System.out.print("Enter the choices : ");
int ch = sc.nextInt();
String deptInput;
String locInput;
switch (ch)
{
case 1:
System.out.print("Enter the department code : ");
deptInput = sc.next();
deptInput = deptInput.toUpperCase();
empBusObj.CheckingNameFromDeptCode(employeeObj, deptInput);
break;
使用流代码将如下所示
empObj.stream().filter(obj -> {
return obj.getDeptID().equals(deptID);
}).forEach(obj -> {
System.out.println(obj.getEmpName());
});
或者parallelStream来一个并发处理:
empObj.parallelStream().filter(obj -> {
return obj.getDeptID().equals(deptID);
}).forEach(obj -> {
System.out.println(obj.getEmpName());
});
你可以像这样用 Stream api:
void CheckingNameFromDeptCode(LinkedList<Employee1> empObj, String deptID)
{
empObj.stream().filter(employer ->
employer.getId().equals(deptID)).forEach(employer ->
System.out.println(employer.getEmpName()));
}
如果您的问题只是“我需要使用 streams/lambdas”,下面是一个使用流的示例:
public static void main(String[] args) {
String deptID = "DPT-01";
List<Employee> employees = new ArrayList<>();
// UUID DEPTID NAME
employees.add(new Employee("UID-01", "DPT-01", "Foo"));
employees.add(new Employee("UID-02", "DPT-02", "Bar"));
employees.add(new Employee("UID-03", "DPT-01", "AnEmployee"));
employees.add(new Employee("UID-04", "DPT-03", "AnotherEmployee"));
List<Employee> filtered = employees.stream().filter(emp -> emp.getDeptID().equals(deptID)).collect(Collectors.toList());
filtered.forEach(System.out::println); // Here you can also use the double colon operator!
}
您可以在此处找到有关流的更多信息:https://www.baeldung.com/java-streams
关于这里的双冒号运算符:https://www.baeldung.com/java-8-double-colon-operator
编辑
有评论推荐使用Stream
的forEach()
方法,这里举个不收集元素的例子:
public static void main(String[] args) {
String deptID = "DPT-01";
List<Employee> employees = new ArrayList<>();
// UUID DEPTID NAME
employees.add(new Employee("UID-01", "DPT-01", "Foo"));
employees.add(new Employee("UID-02", "DPT-02", "Bar"));
employees.add(new Employee("UID-03", "DPT-01", "AnEmployee"));
employees.add(new Employee("UID-04", "DPT-03", "AnotherEmployee"));
employees
.stream()
.filter(emp -> emp.getDeptID().equals(deptID))
.forEach(emp -> System.out.println(emp.getEmpName());
}
给你:没有 double colon operator
,没有 Collectors
,没有 toString()
。请记住,这只是一个示例。
顺便说一句,这是我使用的 Employee
class:
public class Employee {
private String userID;
private String deptID;
private String empName;
public Employee(String userID, String deptID, String empName) {
this.userID = userID;
this.deptID = deptID;
this.empName= empName;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getDeptID() {
return deptID;
}
public void setDeptID(String deptID) {
this.deptID = deptID;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName= empName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee employee = (Employee) o;
return Objects.equals(empName, employee.empName) && Objects.equals(deptID, employee.deptID) && Objects.equals(userName, employee.userName);
}
@Override
public int hashCode() {
return Objects.hash(empName, deptID, userName);
}
@Override
public String toString() {
return "Employee{" +
"empName='" + empName+ '\'' +
", deptID='" + deptID + '\'' +
", userName='" + userName + '\'' +
'}';
}
}
class Checker{
void CheckingNameFromDeptCode(LinkedList<Employee1> empObj, String deptID)
{
for (int i = 0; i < empObj.size(); i++) {
if (empObj.get(i).getDeptID().equals(deptID)) {
System.out.println(empObj.get(i).getEmpName());
}
}
}
}
这是我创建的方法,用于检查输入的部门列表中的员工。 但是有人告诉我在 java 8 中使用 streams/lambda 进行迭代,而不是我使用的好旧的 for 循环。
下面是主要方法
import java.util.*;
public class Manager{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
LinkedList<Employee1> employeeObj = new LinkedList<Employee1>();
Checker empBusObj = new Checker();
employeeObj.add(new Employee1("Souvik", "D1", "Development", "L1", "Kolkata"));
employeeObj.add(new Employee1("Anirban", "D2", "HR", "L2", "Bangalore"));
employeeObj.add(new Employee1("Joydeep", "D3", "Design", "L3", "Delhi"));
employeeObj.add(new Employee1("Rakesh", "D2", "HR", "L4", "Pune"));
System.out.print("Enter the choices : ");
int ch = sc.nextInt();
String deptInput;
String locInput;
switch (ch)
{
case 1:
System.out.print("Enter the department code : ");
deptInput = sc.next();
deptInput = deptInput.toUpperCase();
empBusObj.CheckingNameFromDeptCode(employeeObj, deptInput);
break;
使用流代码将如下所示
empObj.stream().filter(obj -> {
return obj.getDeptID().equals(deptID);
}).forEach(obj -> {
System.out.println(obj.getEmpName());
});
或者parallelStream来一个并发处理:
empObj.parallelStream().filter(obj -> {
return obj.getDeptID().equals(deptID);
}).forEach(obj -> {
System.out.println(obj.getEmpName());
});
你可以像这样用 Stream api:
void CheckingNameFromDeptCode(LinkedList<Employee1> empObj, String deptID)
{
empObj.stream().filter(employer ->
employer.getId().equals(deptID)).forEach(employer ->
System.out.println(employer.getEmpName()));
}
如果您的问题只是“我需要使用 streams/lambdas”,下面是一个使用流的示例:
public static void main(String[] args) {
String deptID = "DPT-01";
List<Employee> employees = new ArrayList<>();
// UUID DEPTID NAME
employees.add(new Employee("UID-01", "DPT-01", "Foo"));
employees.add(new Employee("UID-02", "DPT-02", "Bar"));
employees.add(new Employee("UID-03", "DPT-01", "AnEmployee"));
employees.add(new Employee("UID-04", "DPT-03", "AnotherEmployee"));
List<Employee> filtered = employees.stream().filter(emp -> emp.getDeptID().equals(deptID)).collect(Collectors.toList());
filtered.forEach(System.out::println); // Here you can also use the double colon operator!
}
您可以在此处找到有关流的更多信息:https://www.baeldung.com/java-streams
关于这里的双冒号运算符:https://www.baeldung.com/java-8-double-colon-operator
编辑
有评论推荐使用Stream
的forEach()
方法,这里举个不收集元素的例子:
public static void main(String[] args) {
String deptID = "DPT-01";
List<Employee> employees = new ArrayList<>();
// UUID DEPTID NAME
employees.add(new Employee("UID-01", "DPT-01", "Foo"));
employees.add(new Employee("UID-02", "DPT-02", "Bar"));
employees.add(new Employee("UID-03", "DPT-01", "AnEmployee"));
employees.add(new Employee("UID-04", "DPT-03", "AnotherEmployee"));
employees
.stream()
.filter(emp -> emp.getDeptID().equals(deptID))
.forEach(emp -> System.out.println(emp.getEmpName());
}
给你:没有 double colon operator
,没有 Collectors
,没有 toString()
。请记住,这只是一个示例。
顺便说一句,这是我使用的 Employee
class:
public class Employee {
private String userID;
private String deptID;
private String empName;
public Employee(String userID, String deptID, String empName) {
this.userID = userID;
this.deptID = deptID;
this.empName= empName;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getDeptID() {
return deptID;
}
public void setDeptID(String deptID) {
this.deptID = deptID;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName= empName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee employee = (Employee) o;
return Objects.equals(empName, employee.empName) && Objects.equals(deptID, employee.deptID) && Objects.equals(userName, employee.userName);
}
@Override
public int hashCode() {
return Objects.hash(empName, deptID, userName);
}
@Override
public String toString() {
return "Employee{" +
"empName='" + empName+ '\'' +
", deptID='" + deptID + '\'' +
", userName='" + userName + '\'' +
'}';
}
}