Was*_*kni 9 java java-8 java-stream
我目前正在一个java项目中工作,我有一个字符串列表,我希望他们使用流具有特定的格式.
例如
输入:[nom, contains, b, and, prenom, contains, y, and, age, >=, 1, and, age, <=, 100]
输出:
[
{key:"nom",
operation:"contains",
value:"b"
},
{
key:"prenom",
operation:"contains",
value:"y"
},
{
key:"age",
operation:">=",
value: 1
},
{
key:"age",
operation:"<=",
value: 1000
}]
Run Code Online (Sandbox Code Playgroud)
我写了一个非常基本的代码而不使用流:
List filter = [nom, contains, b, and, prenom, contains, y, and, age, >=, 1, and, age, <=, 100]
List<SearchCriteria> formedFilter = new ArrayList<>();
SearchCriteria sc = new SearchCriteria();
if(filter != null){
for(int i = 0 ;i< filter.size();i++){
if(i % 4 ==0){
sc.setKey((String) filter.get(i));
}else if(i % 4 == 1){
sc.setOperation((String) filter.get(i));
}else if(i % 4 ==2){
sc.setValue(filter.get(i));
formedFilter.add(sc);
}else{
sc = new SearchCriteria();
}
}
}
Run Code Online (Sandbox Code Playgroud)
SearchCriteria类
public class SearchCriteria {
private String key;
private String operation;
private Object value;
public SearchCriteria() {
}
public SearchCriteria(String key, String operation, Object value) {
this.key = key;
this.operation = operation;
this.value = value;
}
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
对于Aomine 答案的 Java 8 版本,您可以使用:
List<SearchCriteria> formedFilter = IntStream.iterate(0, i -> i + 4)
.limit(filter.size() / 4 + 1) // + 1 to consider the last group as well
.mapToObj(i -> new SearchCriteria(filter.get(i), filter.get(i + 1), filter.get(i + 2)))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
或者,与 Holger 的建议类似,您可以使用rangeClosedIntStream 中的 API,如下所示:
List<SearchCriteria> formedFilter2 = IntStream.rangeClosed(0, filter.size() / 4)
.map(i -> i * 4)
.mapToObj(i -> new SearchCriteria(filter.get(i), filter.get(i + 1), filter.get(i + 2)))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |