0

我正在尝试查询地图中所有项目的属性。

我可以用一个集合来做,但它不适用于地图。

我尝试了很多变化,但没有找到一种方法来获取地图中所有对象的 ID。

请参阅下面的完整代码示例。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.jxpath.JXPathContext;

public class TestMap {

    public static void main(String[] args) {

        Person p = createPerson(1);

        p.foes = new HashMap<>();
        p.foes.put("a", createPerson(2));
        p.foes.put("b", createPerson(3));

        p.friends = new ArrayList<>();
        p.friends.add(createPerson(4));
        p.friends.add(createPerson(5));

        //works
        Iterator<Object> friendsId = JXPathContext.newContext(p).iterate("friends/id");
        friendsId.forEachRemaining(o -> System.out.println(o));

        // works
        Iterator<Object> foesId = JXPathContext.newContext(p).iterate("foes/a/id");
        foesId.forEachRemaining(o -> System.out.println(o));

        // does not works :(
        foesId = JXPathContext.newContext(p).iterate("foes/id");
        foesId.forEachRemaining(o -> System.out.println(o));

    }

    private static Person createPerson(Integer id) {
        Person p = new Person();
        p.setId(id);
        return p;
    }

    public static class Person {
        private Integer id;
        private List<Person> friends;
        private Map<String, Person> foes;

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public List<Person> getFriends() {
            return friends;
        }

        public void setFriends(List<Person> friends) {
            this.friends = friends;
        }

        public Map<String, Person> getFoes() {
            return foes;
        }

        public void setFoes(Map<String, Person> foes) {
            this.foes = foes;
        }
    }

}

https://commons.apache.org/proper/commons-jxpath/users-guide.html#Map_Element_Access

4

1 回答 1

0

找到它:“foes/*/id”有效。

有点明显

于 2019-09-12T14:57:24.210 回答