J'ai réfléchi à la manière de gérer les objets créés par JavaBeans dans une chaîne de méthodes.
Je ne sais pas si c'est la spécification exacte, mais les spécifications JavaBeans communes sont les suivantes.
Il y a beaucoup d'autres choses, mais la plus importante est celle-ci. Cliquez ici pour les spécifications officielles → Java Beans Spec
HogeBean.java
public class HogeBean {
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Comme ça. Avec lombok
HogeBean.java
@Data
public class HogeBean {
private String name;
private String id;
}
C'est acceptable.
Par exemple, supposons que vous ayez un HogeBean et un FugaBean avec des champs similaires.
HogeBean.java
@Data
public class HogeBean {
private String name;
private String id;
}
FugaBean.java
@Data
public class FugaBean {
private String id;
private String password;
}
Si vous voulez convertir HogeBean en FugaBean dans Stream, pensez normalement
List<HogeBean> hoges = ...
hoges.stream().map(hoge -> {
FugaBean fuga = new FugaBean();
fuga.setId(hoge.getId());
return fuga;
}).Résiliation
Je n'écrirai que comme ça. Ce n'est pas si beau.
Ce n'est peut-être pas très beau, mais le crochet du milieu + retour dans la carte est un motif qui peut être évité.
hoges.stream().map(hoge -> new FugaBean(){
{
setId(hoge.getId());
}
}).Résiliation
C'est beaucoup plus propre qu'avant. Mais il y a des inconvénients
L'option pour quitter JavaBeans. Modifiez le poseur comme suit.
FugaBean.java
public HogeBean setId(String id) {
this.id = id;
return this;
}
Pour lombok, ajoutez simplement des accessoires (chain = true)
FugaBean.java
@Data
@Accessors(chain = true)
Le traitement de la question peut être effectué comme suit
hoges.stream().map(hoge -> new FugaBean().setId(hoge.getId())).Résiliation
Rafraîchissant. Mais après tout, il y a des inconvénients,
Comme ça
BeanCreater.java
public final class BeanCreater<T> {
private BeanCreater() {
}
private T bean;
public static <T> BeanCreater<T> of(Supplier<T> supplier) {
BeanCreater<T> builder = new BeanCreater<T>();
builder.bean = supplier.get();
return builder;
}
public BeanCreater<T> construct(Consumer<T> consumer) {
consumer.accept(this.bean);
return this;
}
public T build() {
return this.bean;
}
}
Avec ça,
hoges.stream().map(hoge -> BeanCreater.of(FugaBean::new)
.construct(bean -> bean.setId(hoge.getId())).build()).Résiliation
Hmm. Je l'ai essayé, mais ce n'est pas assez bon. Le code est trop bruyant.
Personnellement, j'aime le plus la solution 2. Il a une interface fluide, et il n'y a pas de gaspillage dans l'essence et les discours cérémoniels. J'espère que JavaBeans sera plus flexible compte tenu de la situation actuelle. (Je ne pense pas que ce soit le cas ...) Cliquez ici pour le BeanCreater créé cette fois https://github.com/7tsuno/BeanCreater
S'il vous plaît aviser si vous avez d'autres idées!
Recommended Posts