stream替代双层for循环

这是在处理业务中遇到的:

数据如下:

public class Book {
private String bookId;

private String name;

private String depName;

private String  authDepName;


public String getBookId() {
    return bookId;
}

public void setBookId(String bookId) {
    this.bookId = bookId;
}

public String getName() {
    return name;
}

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

public String getDepName() {
    return depName;
}

public void setDepName(String depName) {
    this.depName = depName;
}



@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Book book = (Book) o;
    return bookId.equals(book.bookId) &&
            name.equals(book.name) &&
            depName.equals(book.depName);
}

@Override
public int hashCode() {
    return Objects.hash(bookId, name, depName);
}

public Book(String bookId, String name, String depName, String authDepName) {
    this.bookId = bookId;
    this.name = name;
    this.depName = depName;
    this.authDepName = authDepName;
}

public Book(String bookId, String name, String depName) {
    this.bookId = bookId;
    this.name = name;
    this.depName = depName;
}

@Override
public String toString() {
    return "Book{" +
            "bookId='" + bookId + '\'' +
            ", name='" + name + '\'' +
            ", depName='" + depName + '\'' +
            ", authDepName='" + authDepName + '\'' +
            '}';
}

}

public class AuthBook {

private String authId;

private String bookId;

private String depName;

private String authDepName;

public String getAuthDepName() {
    return authDepName;
}

public void setAuthDepName(String authDepName) {
    this.authDepName = authDepName;
}

public String getAuthId() {
    return authId;
}

public void setAuthId(String authId) {
    this.authId = authId;
}

public String getBookId() {
    return bookId;
}

public void setBookId(String bookId) {
    this.bookId = bookId;
}

public String getDepName() {
    return depName;
}

public void setDepName(String depName) {
    this.depName = depName;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    AuthBook authBook = (AuthBook) o;
    return Objects.equals(authId, authBook.authId) &&
            Objects.equals(bookId, authBook.bookId) &&
            Objects.equals(depName, authBook.depName) &&
            Objects.equals(authDepName, authBook.authDepName);
}

@Override
public int hashCode() {
    return Objects.hash(authId, bookId, depName, authDepName);
}

@Override
public String toString() {
    return "AuthBook{" +
            "authId='" + authId + '\'' +
            ", bookId='" + bookId + '\'' +
            ", depName='" + depName + '\'' +
            ", authDepName='" + authDepName + '\'' +
            '}';
}

public AuthBook(String authId, String bookId, String depName, String authDepName) {
    this.authId = authId;
    this.bookId = bookId;
    this.depName = depName;
    this.authDepName = authDepName;
}

}

初始化数据:
//授权记录
List books =Arrays.asList(
new Book(“1”,“电子书01”,“技术部”),
new Book(“2”,“电子书02”,“技术部”),
new Book(“3”,“电子书03”,“技术部”),
new Book(“4”,“电子书04”,“技术部”),
new Book(“7”,“电子书05”,“技术部”)
);
List authSys = new ArrayList<>();

   	//拿到的各个部门的数据
    List<AuthBook> authBooks = Arrays.asList(
            new AuthBook("1", "2", "技术部", "易学"),
          new AuthBook("2", "2", "技术部", "语音"),
          new AuthBook("3", "1", "技术部", "语音"),
            new AuthBook("4", "4", "技术部", "易学"),
            new AuthBook("5", "6", "技术部", "易学")
    );

需求如下:
1.根据部门1 部门2 去授权记录中拿各自都没有的数据
2.根据选中的list 的bookid 与第一步捞的授权记录中bookId进行比较
不相同 直接入库
相同 判断 授权部门是否相同
相同 修改读写权限
不相同 添加该部门授权记录数据
具体代码:(只是简单的写了一下)
//拿到易学的
Map<String, AuthBook> authBookMap = authBooks.stream().filter(authBook -> authBook.getAuthDepName().equals(“易学”)).collect(
Collectors.toMap(authBook -> authBook.getBookId(), authBook -> authBook)
);
//匹配易学要添加的
List bookList = books.stream().map(book -> {
return jisuan(book,authBookMap);
}).collect(Collectors.toList()).stream().filter(book -> book != null).collect(toList());

    bookList.stream().forEach(System.out::println);

}
private Book jisuan(Book book,Map<String,AuthBook> authBookMap){
    AuthBook authBook = authBookMap.get(book.getBookId());

    if(authBook == null){
        return book;
    }
    return null;
}

猜你喜欢

转载自blog.csdn.net/qq_43504447/article/details/106422878