/**
* Compact a list of objects Label, which is sorted on Label.amount
*/
import java.util.*;
private final double amount;
{
this.id = id;
this.amount = amount;
}
return this.id;
}
public double getAmount() {
return this.amount;
}
return id + ": " + amount;
}
}
class Ideone {
public static List<Label> compact(List<Label> l)
{
Set<String> ids = new HashSet<>();
List<Label> toret = new ArrayList<>();
if ( !ids.contains( label.getId() ) ) {
ids.add( label.getId() );
toret.add( label );
}
}
return toret;
}
public static void compactInPlace(List<Label> l)
{
Set<String> ids = new HashSet<>();
for(int i = 0; i < l.size(); ++i) {
if ( !ids.contains( l.get( i ).getId() ) ) {
ids.add( l.get( i ).getId() );
} else {
l.remove( i );
--i;
}
}
return;
}
public static void main
(String[] args
) {
ArrayList<Label> l = new ArrayList<>();
l.
add( new Label( "1742",
10 ) ); l.
add( new Label( "1742",
11 ) ); l.
add( new Label( "1647",
12 ) ); l.
add( new Label( "4217",
13 ) ); l.
add( new Label( "1647",
14 ) ); l.
add( new Label( "1742",
15 ) );
compactInPlace( l );
}
}
LyoqCiAqICBDb21wYWN0IGEgbGlzdCBvZiBvYmplY3RzIExhYmVsLCB3aGljaCBpcyBzb3J0ZWQgb24gTGFiZWwuYW1vdW50CiAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwoKY2xhc3MgTGFiZWwgewogICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7CiAgICBwcml2YXRlIGZpbmFsIGRvdWJsZSBhbW91bnQ7CiAgICAKICAgIHB1YmxpYyBMYWJlbChTdHJpbmcgaWQsIGRvdWJsZSBhbW91bnQpCiAgICB7CiAgICAJdGhpcy5pZCA9IGlkOwogICAgCXRoaXMuYW1vdW50ID0gYW1vdW50OwogICAgfQogICAgCiAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgewogICAgCXJldHVybiB0aGlzLmlkOwogICAgfQogICAgCiAgICBwdWJsaWMgZG91YmxlIGdldEFtb3VudCgpIHsKICAgIAlyZXR1cm4gdGhpcy5hbW91bnQ7CiAgICB9CiAgICAKICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAJcmV0dXJuIGlkICsgIjogIiArIGFtb3VudDsKICAgIH0KfQoJCmNsYXNzIElkZW9uZSB7CglwdWJsaWMgc3RhdGljIExpc3Q8TGFiZWw+IGNvbXBhY3QoTGlzdDxMYWJlbD4gbCkKCXsKCQlTZXQ8U3RyaW5nPiBpZHMgPSBuZXcgSGFzaFNldDw+KCk7CgkJTGlzdDxMYWJlbD4gdG9yZXQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCQkKCQlmb3IoTGFiZWwgbGFiZWw6IGwpIHsKCQkJaWYgKCAhaWRzLmNvbnRhaW5zKCBsYWJlbC5nZXRJZCgpICkgKSB7CgkJCQlpZHMuYWRkKCBsYWJlbC5nZXRJZCgpICk7CgkJCQl0b3JldC5hZGQoIGxhYmVsICk7CgkJCX0KCQl9CgkJCgkJcmV0dXJuIHRvcmV0OwoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgY29tcGFjdEluUGxhY2UoTGlzdDxMYWJlbD4gbCkKCXsKCSAgICBTZXQ8U3RyaW5nPiBpZHMgPSBuZXcgSGFzaFNldDw+KCk7CgkKCSAgICBmb3IoaW50IGkgPSAwOyBpIDwgbC5zaXplKCk7ICsraSkgewoJICAgICAgICBpZiAoICFpZHMuY29udGFpbnMoIGwuZ2V0KCBpICkuZ2V0SWQoKSApICkgewoJICAgICAgICAgICAgaWRzLmFkZCggbC5nZXQoIGkgKS5nZXRJZCgpICk7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICBsLnJlbW92ZSggaSApOwoJICAgICAgICAgICAgLS1pOwoJICAgICAgICB9CgkgICAgfQoJCgkgICAgcmV0dXJuOwoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCgl7CgkJQXJyYXlMaXN0PExhYmVsPiBsID0gbmV3IEFycmF5TGlzdDw+KCk7CgkJCgkJbC5hZGQoIG5ldyBMYWJlbCggIjE3NDIiLCAxMCApICk7CgkJbC5hZGQoIG5ldyBMYWJlbCggIjE3NDIiLCAxMSApICk7CgkJbC5hZGQoIG5ldyBMYWJlbCggIjE2NDciLCAxMiApICk7CgkJbC5hZGQoIG5ldyBMYWJlbCggIjQyMTciLCAxMyApICk7CgkJbC5hZGQoIG5ldyBMYWJlbCggIjE2NDciLCAxNCApICk7CgkJbC5hZGQoIG5ldyBMYWJlbCggIjE3NDIiLCAxNSApICk7CgoJCWNvbXBhY3RJblBsYWNlKCBsICk7CgkJU3lzdGVtLm91dC5wcmludGxuKCBsICk7Cgl9Cn0K