/* package whatever; // don't place package name! */
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
List<DetailedData> data = getList();
List<DetailedData> temp = data.stream()
.collect(Collectors.groupingBy(DetailedData::getModel))
.values().stream()
.map(DetailedData::merge)
.collect(Collectors.toList());
temp.
forEach(System.
out::println
); }
public static List<DetailedData> getList() {
List<DetailedData> ret = new ArrayList<>();
ret.add(new DetailedData("dell", "inspiron 15-R", "laptop", "Header", "9j4AAQSk", null));
ret.add(new DetailedData("dell", "inspiron 15-R", "laptop", "Thumbnail", "iVBORw0KGg", null));
ret.add(new DetailedData("apple", "macbook air", "laptop", "Header", "9j4AAQSk", null));
ret.add(new DetailedData("apple", "macbook air", "laptop", "Thumbnail", "iVBORw0KGg", null));
ret.add(new DetailedData("dell", "xps 13", "laptop", "Header", "9j4AAQSk", null));
return ret;
}
}
class DetailedData {
super();
Company = company;
Model = model;
Category = category;
ImageType = imageType;
ImageBuffer1 = imageBuffer1;
ImageBuffer2 = imageBuffer2;
}
public static DetailedData merge(List<DetailedData> list) {
if(list.isEmpty()) // Not possible after 'groupingBy'.
return null;
if(list.size() == 1)
return list.get(0);
// At least 2 elements:
DetailedData ret = list.get(0);
ret.ImageBuffer2 = list.get(1).ImageBuffer1;
return ret;
}
return Model;
}
public String getImageType
() { return ImageType;
}
@Override
return String.
join(", ", Company, Model, Category, ImageType, ImageBuffer1, ImageBuffer2
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJTGlzdDxEZXRhaWxlZERhdGE+IGRhdGEgPSBnZXRMaXN0KCk7CgkJCgkJTGlzdDxEZXRhaWxlZERhdGE+IHRlbXAgPSBkYXRhLnN0cmVhbSgpCgkJCS5jb2xsZWN0KENvbGxlY3RvcnMuZ3JvdXBpbmdCeShEZXRhaWxlZERhdGE6OmdldE1vZGVsKSkKCQkJLnZhbHVlcygpLnN0cmVhbSgpCgkJCS5tYXAoRGV0YWlsZWREYXRhOjptZXJnZSkKCQkJLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CQkJCgkJCgkJdGVtcC5mb3JFYWNoKFN5c3RlbS5vdXQ6OnByaW50bG4pOwoJfQoJCglwdWJsaWMgc3RhdGljIExpc3Q8RGV0YWlsZWREYXRhPiBnZXRMaXN0KCkgewoJCUxpc3Q8RGV0YWlsZWREYXRhPiByZXQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCQkKCQlyZXQuYWRkKG5ldyBEZXRhaWxlZERhdGEoImRlbGwiLCAiaW5zcGlyb24gMTUtUiIsICJsYXB0b3AiLCAiSGVhZGVyIiwgIjlqNEFBUVNrIiwgbnVsbCkpOwoJCXJldC5hZGQobmV3IERldGFpbGVkRGF0YSgiZGVsbCIsICJpbnNwaXJvbiAxNS1SIiwgImxhcHRvcCIsICJUaHVtYm5haWwiLCAiaVZCT1J3MEtHZyIsIG51bGwpKTsKCQlyZXQuYWRkKG5ldyBEZXRhaWxlZERhdGEoImFwcGxlIiwgIm1hY2Jvb2sgYWlyIiwgImxhcHRvcCIsICJIZWFkZXIiLCAiOWo0QUFRU2siLCBudWxsKSk7CgkJcmV0LmFkZChuZXcgRGV0YWlsZWREYXRhKCJhcHBsZSIsICJtYWNib29rIGFpciIsICJsYXB0b3AiLCAiVGh1bWJuYWlsIiwgImlWQk9SdzBLR2ciLCBudWxsKSk7CgkJcmV0LmFkZChuZXcgRGV0YWlsZWREYXRhKCJkZWxsIiwgInhwcyAxMyIsICJsYXB0b3AiLCAiSGVhZGVyIiwgIjlqNEFBUVNrIiwgbnVsbCkpOwoJCQoJCXJldHVybiByZXQ7Cgl9Cn0KCmNsYXNzIERldGFpbGVkRGF0YSB7CglTdHJpbmcgQ29tcGFueTsKICAgIFN0cmluZyBNb2RlbDsKICAgIFN0cmluZyBDYXRlZ29yeTsKICAgIFN0cmluZyBJbWFnZVR5cGU7CiAgICBTdHJpbmcgSW1hZ2VCdWZmZXIxOwogICAgU3RyaW5nIEltYWdlQnVmZmVyMjsKICAgIAogICAgcHVibGljIERldGFpbGVkRGF0YShTdHJpbmcgY29tcGFueSwgU3RyaW5nIG1vZGVsLCBTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBpbWFnZVR5cGUsIFN0cmluZyBpbWFnZUJ1ZmZlcjEsCgkJCVN0cmluZyBpbWFnZUJ1ZmZlcjIpIHsKCQlzdXBlcigpOwoJCUNvbXBhbnkgPSBjb21wYW55OwoJCU1vZGVsID0gbW9kZWw7CgkJQ2F0ZWdvcnkgPSBjYXRlZ29yeTsKCQlJbWFnZVR5cGUgPSBpbWFnZVR5cGU7CgkJSW1hZ2VCdWZmZXIxID0gaW1hZ2VCdWZmZXIxOwoJCUltYWdlQnVmZmVyMiA9IGltYWdlQnVmZmVyMjsKCX0KICAgIAogICAgcHVibGljIHN0YXRpYyBEZXRhaWxlZERhdGEgbWVyZ2UoTGlzdDxEZXRhaWxlZERhdGE+IGxpc3QpIHsKCQlpZihsaXN0LmlzRW1wdHkoKSkgLy8gTm90IHBvc3NpYmxlIGFmdGVyICdncm91cGluZ0J5Jy4KICAgIAkJcmV0dXJuIG51bGw7CiAgICAJCiAgICAJaWYobGlzdC5zaXplKCkgPT0gMSkKICAgIAkJcmV0dXJuIGxpc3QuZ2V0KDApOwogICAgCQoJCS8vIEF0IGxlYXN0IDIgZWxlbWVudHM6CiAgICAJRGV0YWlsZWREYXRhIHJldCA9IGxpc3QuZ2V0KDApOwogICAgCXJldC5JbWFnZUJ1ZmZlcjIgPSBsaXN0LmdldCgxKS5JbWFnZUJ1ZmZlcjE7CiAgICAJcmV0dXJuIHJldDsKCX0KCglwdWJsaWMgU3RyaW5nIGdldE1vZGVsKCkgewogICAgCXJldHVybiBNb2RlbDsKICAgIH0KICAgIAogICAgcHVibGljIFN0cmluZyBnZXRJbWFnZVR5cGUoKSB7CiAgICAJcmV0dXJuIEltYWdlVHlwZTsKICAgIH0KICAgIAogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgCXJldHVybiBTdHJpbmcuam9pbigiLCAiLCBDb21wYW55LCBNb2RlbCwgQ2F0ZWdvcnksIEltYWdlVHlwZSwgSW1hZ2VCdWZmZXIxLCBJbWFnZUJ1ZmZlcjIpOwogICAgfQp9