Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #38520
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Is there a better way to group and sort objects? |
| Date | 2018-08-07 09:44 -0400 |
| Organization | A noiseless patient Spider |
| Message-ID | <pkc7nj$6du$1@dont-email.me> (permalink) |
| References | <8c045ff4-98c5-4253-9136-b26b34cf8f77@googlegroups.com> |
On 8/7/2018 9:00 AM, Eric Douglas wrote:
> I want to combine and sort objects by key properties and merge their secondary properties. Is there a better way? This is what I came up with..
>
> public abstract class TestStatic {
> private static class TestClass extends Object implements Comparable<Object> {
> private int var1;
> private int var2;
>
> @Override
> public int compareTo(Object compareMe) {
> if (compareMe == null || compareMe.getClass() != getClass()) {
> return 1;
> }
> return var1 - ((TestClass) compareMe).getVar1();
> }
Note that this method violates the Comparable contract. If you use
this compareTo() method with Arrays.sort() or Collections.sort() or a
SortedMap or whatever, and the objects being compared are a mixture of
different TestClass subclasses, there's no telling what might happen.
> @Override
> public boolean equals(Object compareMe) {
> if (compareMe == null || compareMe.getClass() != getClass()) {
> return false;
> }
> if (var1 != ((TestClass) compareMe).getVar1()) {
> return false;
> }
> return true;
> }
>
> public String toString() {
> return String.valueOf(var1);
> }
>
> public void setVar1(int value) {
> var1 = value;
> }
>
> public int getVar1() {
> return var1;
> }
>
> public void setVar2(int value) {
> var2 = value;
> }
>
> public int getVar2() {
> return var2;
> }
> }
> public static void main(final String[] args) {
> HashMap<String,TestClass> hm = new HashMap<>();
> TestClass test1 = new TestClass();
> test1.setVar1(3);
> test1.setVar2(12);
> hm.put(test1.toString(),test1);
> TestClass test2 = new TestClass();
> test2.setVar1(4);
> if (hm.containsKey(test2.toString())) {
> test2 = hm.get(test2.toString());
> test2.setVar2(test2.getVar2() + 42);
> } else {
> test2.setVar2(42);
> hm.put(test2.toString(), test2);
> }
Alternatively, you might take advantage of the fact that Map::put
returns the old key (if any) associated with its value:
TestClass test2 = new TestClass();
test2.setVar1(4);
TestClass oldTest = hm.put(test2.toString(), test2);
test2.setVar2(42 + (oldTest == null ? 0 : oldTest.getVar2()));
... thus cutting the number of map searches in half.
> TestClass test3 = new TestClass();
> test3.setVar1(3);
> if (hm.containsKey(test3.toString())) {
> test3 = hm.get(test3.toString());
> test3.setVar2(test3.getVar2() + 55);
> } else {
> test3.setVar2(55);
> hm.put(test3.toString(), test3);
> }
Similarly here.
> ArrayList<TestClass> al = new ArrayList<>();
> al.addAll(hm.values());
> Collections.sort(al); > for (TestClass t1 : al) {
> System.out.println(t1.getVar1() + " " + t1.getVar2());
> }
> }
> }
--
esosman@comcast-dot-net.invalid
Eight hundred ninety-seven days to go.
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Is there a better way to group and sort objects? Eric Douglas <e.d.programmer@gmail.com> - 2018-08-07 06:00 -0700
Re: Is there a better way to group and sort objects? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-08-07 09:44 -0400
Re: Is there a better way to group and sort objects? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-08-07 11:33 -0400
Re: Is there a better way to group and sort objects? Eric Douglas <e.d.programmer@gmail.com> - 2018-08-07 10:22 -0700
Re: Is there a better way to group and sort objects? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-08-07 14:16 -0400
Re: Is there a better way to group and sort objects? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-08-07 14:36 -0400
Re: Is there a better way to group and sort objects? Eric Douglas <e.d.programmer@gmail.com> - 2018-08-07 12:13 -0700
Re: Is there a better way to group and sort objects? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-08-07 16:00 -0400
Re: Is there a better way to group and sort objects? Martin Gregorie <martin@mydomain.invalid> - 2018-08-08 08:20 +0000
Re: Is there a better way to group and sort objects? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-08-08 06:57 -0400
Re: Is there a better way to group and sort objects? Martin Gregorie <martin@mydomain.invalid> - 2018-08-08 11:08 +0000
Re: Is there a better way to group and sort objects? Martin Gregorie <martin@mydomain.invalid> - 2018-08-08 11:22 +0000
Re: Is there a better way to group and sort objects? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-08-08 07:45 -0400
Re: Is there a better way to group and sort objects? Martin Gregorie <martin@mydomain.invalid> - 2018-08-08 14:12 +0000
Re: Is there a better way to group and sort objects? Eric Douglas <e.d.programmer@gmail.com> - 2018-08-08 05:50 -0700
Re: Is there a better way to group and sort objects? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-08-08 09:23 -0400
Re: Is there a better way to group and sort objects? Eric Douglas <e.d.programmer@gmail.com> - 2018-08-08 06:47 -0700
Re: Is there a better way to group and sort objects? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-08-08 10:31 -0400
Re: Is there a better way to group and sort objects? Eric Douglas <e.d.programmer@gmail.com> - 2018-08-08 08:24 -0700
Re: Is there a better way to group and sort objects? Robert Klemme <shortcutter@googlemail.com> - 2018-08-14 14:06 +0200
Re: Is there a better way to group and sort objects? Eric Douglas <e.d.programmer@gmail.com> - 2018-08-14 05:49 -0700
Re: Is there a better way to group and sort objects? Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2018-08-09 16:06 +0200
Re: Is there a better way to group and sort objects? Eric Douglas <e.d.programmer@gmail.com> - 2018-08-14 05:47 -0700
csiph-web