Report z.
TYPES: BEGIN OF developer,
focus_language TYPE string,
salary TYPE i,
name TYPE string,
END OF developer,
BEGIN OF presale,
focus_area TYPE string,
salary_plus_bonus TYPE i,
name TYPE string,
END OF presale.
DATA: developer_list TYPE TABLE OF developer WITH EMPTY KEY,
presale_list TYPE TABLE OF presale WITH EMPTY KEY.
developer_list = VALUE #(
( name = 'Jerry' focus_language = 'ABAP' salary = 2000 )
( name = 'Tom' focus_language = 'Java' salary = 2050 ) ).
presale_list = VALUE #( ( name = 'Jerry' ) ( name = 'Tom' ) ).
DATA(lo_mapping_executor) = cl_abap_corresponding=>create(
source = developer_list
destination = presale_list
mapping = VALUE cl_abap_corresponding=>mapping_table(
( level = 0 kind = 1 srcname = 'focus_language' dstname = 'focus_area' )
( level = 0 kind = 1 srcname = 'salary' dstname = 'salary_plus_bonus' ) ) ).
lo_mapping_executor->execute( EXPORTING source = developer_list
CHANGING destination = presale_list ).
public class Developer {
private String focusLanguage;
private int salary;
private String name;
public Developer(String name, String language, int salary){
this.name = name;
this.focusLanguage = language;
this.salary = salary;
}
}
public class PreSales {
private String name;
private String focusArea;
private int salaryPlusBonus;
public PreSales(String name){
this.name = name;
}
public String toString(){
return "Presales: " + this.name + " focusArea: " + this.focusArea + " salaryPlusBonus: " +
this.salaryPlusBonus;
}
}
List<Developer> developers = new ArrayList<Developer>();
developers.add(new Developer("Jerry", "ABAP", 2000));
developers.add(new Developer("Tom", "Java", 2050));
List<PreSales> preSales = new ArrayList<PreSales>();
preSales.add(new PreSales("Jerry"));
preSales.add(new PreSales("Tom"));
Above code just constructs a list for developer and a list for presales.
CL_MAPPING[] mapping = new CL_MAPPING[2];
mapping[0] = new CL_MAPPING("focusLanguage", "focusArea", null);
Function<Integer, Integer> salaryDouble = e -> e * 2;
mapping[1] = new CL_MAPPING("salary", "salaryPlusBonus", salaryDouble);
CL_JAVA_CORRESPONDING mappingExecutor = CL_JAVA_CORRESPONDING.CREATE(developers, preSales, mapping);
List<PreSales> mappedPresales = (List<PreSales>) mappingExecutor.execute();
mappedPresales.forEach(System.out::println);
function Developer(name, language, salary){
this.name = name;
this.focusLanguage = language;
this.salary = salary;
}
function Presales(name){
this.name = name;
}
var CL_JS_CORRESPONDING = function() {
function MappingExecutor(src, target, mapping){
this.src = src;
this.target = target;
this.mapping = mapping;
function _map(source, target, mapping){
for( var i = 0; i < source.length; i++){
_mapEach(source[i], target[i], mapping);
}
}
function _mapEach(source, target, mapping){
target[mapping.target] = source[mapping.source];
if( mapping.function){
target[mapping.target] = mapping.function.call(null, target[mapping.target]);
}
}
MappingExecutor.prototype.execute = function(){
for( var i = 0; i < this.mapping.length; i++){
_map(this.src, this.target, this.mapping[i]);
}
return this.target;
}
};
return {
CREATE:function(src,target,mapping){
if( !Array.isArray(src) || !Array.isArray(target)){
return target;
}
if( src.length != target.length){
return target;
}
if( src.length == 0){
return target;
}
return new MappingExecutor(src, target, mapping);
}
}}();
var developerList = [ new Developer("Jerry", "ABAP", 2000),
new Developer("Tom", "Java", 2050)];
var preSalesList = [ new Presales("Jerry"),
new Presales("Tom")];
var mapping = [
{
source:"focusLanguage",
target:"focusArea"
},
{
source:"salary",
target:"salaryPlusBonous",
function: x => { return x * 2 }
}
];
var mappingExecutor = CL_JS_CORRESPONDING.CREATE(developerList, preSalesList, mapping);
var mappedPreSales = mappingExecutor.execute();
var CL_JS_CORRESPONDING = function() {
function MappingExecutor(src, target, mapping){
this.src = src;
this.target = target;
this.mapping = mapping;
MappingExecutor.prototype.execute = function(){
var mapCurrentTarget = function(currentTarget, currentSource, mapping){
mapping.map(function(currentMapping){
this.currentTarget[currentMapping.target] = this.currentSource[currentMapping.source];
if( currentMapping.function) {
this.currentTarget[currentMapping.target] = currentMapping.function.call(null, this.currentTarget[currentMapping.target]);
}
}, {
currentTarget: currentTarget,
currentSource: currentSource
});
return currentTarget;
}
var mappingFunctor = function (currentTarget, index){
return mapCurrentTarget(currentTarget, this.src[index], this.mapping);
};
return this.target.map(mappingFunctor, this);
}
};
return {
CREATE:function(src,target,mapping){
if( !Array.isArray(src) || !Array.isArray(target)){
return target;
}
if( src.length != target.length){
return target;
}
if( src.length == 0){
return target;
}
return new MappingExecutor(src, target, mapping);
}
}}();
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
22 | |
10 | |
9 | |
8 | |
7 | |
7 | |
6 | |
6 | |
6 | |
5 |