Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在powershell或Java中查找对象的最常见属性_Java_Arrays_Powershell_Object_Active Directory - Fatal编程技术网

如何在powershell或Java中查找对象的最常见属性

如何在powershell或Java中查找对象的最常见属性,java,arrays,powershell,object,active-directory,Java,Arrays,Powershell,Object,Active Directory,所以我有点被困在我想做的事情上。我从Active Directory中提取了某些安全组,并为组中的每个人以及他们各自的经理创建了对象。我想做的是找出谁是团队中最常见的经理。这是一个我想要的例子 Group Employee Manager Sales Phil Joe Sales Chris Dave Sales John

所以我有点被困在我想做的事情上。我从Active Directory中提取了某些安全组,并为组中的每个人以及他们各自的经理创建了对象。我想做的是找出谁是团队中最常见的经理。这是一个我想要的例子

Group           Employee             Manager
Sales           Phil                 Joe
Sales           Chris                Dave
Sales           John                 Dave
Sales           Rebecca              Joe
Sales           Chris                Joe
Sales           Bob                  Annie
HR              Alex                 Steve
HR              Jill                 Steve
HR              Tom                  Maria
HR              Luke                 Steve
Marketing       Don                  Luke
Marketing       Julie                Luke
Marketing       Tim                  Mark
Marketing       Thomas               Luke

基本上,每个对象都有一个组名,即组中的员工及其经理。我目前将所有这些对象都放在一个数组中。我只想让每个小组找到最常见的经理。所以在这个例子中,销售团队最常见的经理是乔,人力资源是史蒂夫,营销是卢克。唯一的问题是,在我的实际数组中有1000多个不同的组名,因此我无法指定查找所有组名为“Sales”的组,然后再查找一个公共经理。我基本上需要一些方法来找到所有名称相同的组,而不指定名称,然后从这些组中找出谁是最常见的经理。如果有人知道一个可行的方法,我会非常感激。我正在努力弄清楚如何使用object。关于如何在Java或powershell中实现这一点的任何可能的线索都将对我有所帮助,因为我对Java也有一些了解,尽管powershell是首选,因为我正试图在其中实现这一点。如果我做不到,我可能会回到绘图板上尝试另一种方法。

我无法告诉您具体如何做,因为我根本不知道active directory java库。不过,对于一般流程,您只需将此数组转换为一个映射,将部门映射到要计数的经理映射,然后对其进行迭代,得到每个组计数最高的经理。差不多

Map<String, HashMap<String, Integer>> map = new HashMap<>();
for(activedirectoryobject ado : adoList) {
    HashMap<String, Integer> groupMap = map.get(adoList.group)
    if(groupMap != null) {
        if(groupMap.contains(adoList.manager) {
            groupMap.put(adoList.manager, groupMap.get(adoList.manager))
        } else {
            groupMap.put(adoList.manager, 1)
        }
    } else {
        Map<String, Integer> newGroup = new HashMap<>();
        newGroup.put(adoList.manager, 1); 
        map.put(adoList.group, newGroup)
    }
}
List<String> managers = new ArrayList<>();
for (Map.Entry<String, HashMap<String, Integer>> entry : map.entrySet()) {
    //entry.getKey() gets the group, entry.getValue()) gets the submap
    int highest = 0;
    String manager = '';
    for (Map.Entry<String, Integer> subEntry : map.entrySet()) {
        if(subEntry.getValue() > highest) {
            highest = subEntry.getValue();
            manager = subEntry.getKey();
        }
    }
    managers.add(manager);
}
Map Map=newhashmap();
for(activedirectoryobject ado:adoList){
HashMap-groupMap=map.get(adoList.group)
if(groupMap!=null){
if(groupMap.contains(adoList.manager){
groupMap.put(adoList.manager,groupMap.get(adoList.manager))
}否则{
groupMap.put(adoList.manager,1)
}
}否则{
Map newGroup=newhashmap();
newGroup.put(adoList.manager,1);
map.put(adoList.group,newGroup)
}
}
列表管理器=新的ArrayList();
对于(Map.Entry:Map.entrySet()){
//entry.getKey()获取组,entry.getValue()获取子映射
int最高=0;
字符串管理器=“”;
对于(Map.Entry子项:Map.entrySet()){
if(subEntry.getValue()>最高){
最高=子项.getValue();
manager=subEntry.getKey();
}
}
managers.add(manager);
}

在你的情况下应该有用

我的想法基本上与user3298823相同,但在代码方面采取了一些不同的方法。您可以使用Collections.max获取最常用的管理器,并使用merge方法增加计数。例如,假设您想查看销售组:

    Map<String,Map<String,Integer>> map = new HashMap<>();

    for ( Record record : records )  {
        if ( !map.containsKey(record.group) ) {
            Map<String,Integer> counts = new HashMap<>();
            counts.put(record.manager, 1);
            map.put(record.group, counts);
        } else {
            map.get(record.group).merge(record.manager, 1, Integer::sum);
        }
    }
    List<String> mostCommon = new ArrayList<>();

    int max = Collections.max(map.get("Sales").values());

    for ( String manager : map.get("Sales").keySet() ) {
        if ( map.get("Sales").get(manager) == max ) {
            mostCommon.add(manager);
        }
    }
Map Map=newhashmap();
用于(记录:记录){
如果(!map.containsKey(record.group)){
映射计数=新的HashMap();
计数。输入(记录管理器,1);
map.put(记录、组、计数);
}否则{
map.get(record.group).merge(record.manager,1,Integer::sum);
}
}
List mostCommon=new ArrayList();
int max=Collections.max(map.get(“Sales”).values());
for(字符串管理器:map.get(“Sales”).keySet()){
if(map.get(“Sales”).get(manager)==max){
最常见的添加(管理器);
}
}

在powershell中,这很简单:$ArrayOfGroupSuserSandManager |组对象管理器