相关疑难解决方法(0)

使用流填充Java Map,该Java Map映射与其字母位置对应的字母表

我正在填充一个Map<Character, Integer> alphabetToNumber映射与其字母位置对应的字母

char [] alphabetArray = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
Map<Character, Integer> alphabetToNumber = new HashMap<>();
int counter = 1;
for(Character letter : alphabetArray) {
    alphabetToNumber.put(letter, counter);
    counter++;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但我想知道是否可以使用Java 8流完成.谢谢.

java java-8 java-stream

3
推荐指数
1
解决办法
207
查看次数

Java8将列表<P>转换为Map <Integer,List <P >>

我有List<Person>对象,并希望将其转换Map<Integer, List<Person>>为地图的关键字表示一个人的财产等级.它可能在源列表中具有多个具有相同等级的Person对象,在这种情况下,我想将它们全部分组到List中,与生成的Map中的相应等级相对应.

到目前为止,我有以下代码

public class PersonMain
{
   public static void main(String[] args)
   {
    Person person1 = new Person();
    person1.setName("person1");
    person1.setGrade(1);

    Person person2 = new Person();
    person2.setName("person2");
    person2.setGrade(2);

    Person person3 = new Person();
    person3.setName("person3");
    person3.setGrade(1);

    List<Person> persons = Arrays.asList(person1, person2, person3);

    Map<Integer, List<Person>> personsMap = persons.stream()
            .collect(Collectors.toMap(Person::getGrade, PersonMain::getPerson, PersonMain::combinePerson));

    System.out.println(personsMap);
}
private static List<Person> getPerson(Person p)
{
    List<Person> persons = new ArrayList<>();
    persons.add(p);
    return persons;
}
private static List<Person> combinePerson(List<Person> oldVal, List<Person> newVal)
{
        oldVal.addAll(newVal);
        return oldVal; …
Run Code Online (Sandbox Code Playgroud)

collections java-8

3
推荐指数
1
解决办法
84
查看次数

Java 8 List&lt;V&gt; 到 Map&lt;K, V&gt; 和函数

我试图按照Java 8 List 进入 Map并尝试在一个列表中更改 Set to Map

而不是循环(有效)

for (Type t : toSet()) {
    map.put(Pair.of(t, Boolean.TRUE), this::methodAcceptingMap);
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下解决方案:

toSet().stream()
       .collect(Collectors.toMap(Pair.of(Function.identity(), Boolean.TRUE), 
                                 this::methodAcceptingMap));
Run Code Online (Sandbox Code Playgroud)

但在转换时出错:

Type mismatch: cannot convert from Pair<Function<Object,Object>,Boolean> 
to Function<? super T,? extends K>
Run Code Online (Sandbox Code Playgroud)

我的地图

private Map<Pair<Type, Boolean>, BiConsumer<Pair<Type, Boolean>, Parameters>> map =
      new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

java dictionary set java-8 java-stream

3
推荐指数
1
解决办法
125
查看次数

Java 8 List <V>到Map <K,V>覆盖重复键

嗨,我在执行代码时遇到错误:

java.lang.IllegalStateException: Duplicate key ad.ecs.core.scriptengine.SiteIDAndNPI@3a75ce6f
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1253)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at ad.ecs.core.scriptengine.Utils.getInterfaceIDsWithSiteIDAndNPI(Utils.java:689)
Run Code Online (Sandbox Code Playgroud)

我正在尝试将我的列表分组到地图中:

public static Map<Integer, SiteIDAndNPI> getInterfaceIDsWithSiteIDAndNPI(Session session) {
    @SuppressWarnings("unchecked")
    List<Srvsetup> srvsetups = session.createCriteria(Srvsetup.class)
            .add(Restrictions.gt("scriptinterfaceid", 0))
            .list(); 
    Map<Integer, SiteIDAndNPI> interfaceIDs = srvsetups.stream()
            .collect(Collectors.toMap(srv -> srv.getScriptinterfaceid(), 
                    srv -> getSiteIDAndNPI(srv.getId().getSiteid(), session)));

    @SuppressWarnings("unchecked")
    List<Facsetup> facsetups = session.createCriteria(Facsetup.class)
            .add(Restrictions.gt("scriptinterfaceid", 0))
            .list(); 
    interfaceIDs.putAll(facsetups.stream()
            .collect(Collectors.toMap(fac -> fac.getScriptinterfaceid(), 
                    fac -> getSiteIDAndNPI(fac.getPlid(), session))));
    return interfaceIDs;
}

public static SiteIDAndNPI getSiteIDAndNPI(int siteID, Session …
Run Code Online (Sandbox Code Playgroud)

java lambda dictionary java-8 java-stream

2
推荐指数
1
解决办法
2076
查看次数

流:通过供应商和累加器收集

我一直在尝试使用Stream 的收集方法,将列表转换为 HashMap。我使用下面的代码作为参考:

String result = list.parallelStream().collect(StringBuilder::new,
            (response, element) -> response.append(" ").append(element),
            (response1, response2) -> response1.append(",").append(response2.toString()))
            .toString();
Run Code Online (Sandbox Code Playgroud)

当我在 eclipse 中编写以下不完整的语句并在 ? 处执行ctrl+操作时space

Map<String,Choice> map1=  list1.stream().collect(()-> new HashMap<String,Choice>(), 
        (r,s) -> r.?,(r,s) -> r.putAll(s));
Run Code Online (Sandbox Code Playgroud)

考虑到使用 StringBuilder 的代码片段,我的期望是,累加器函数的第一个参数应该是 HashMap,因为我已使用 HashMap::new 作为供应商函数。根据这种理解,eclipse应该建议我使用HashMap的方法,但事实并非如此。

然而,这似乎工作正常

list1.stream().collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
Run Code Online (Sandbox Code Playgroud)

已经提到了Java 8 Int Stream Collect with StringBuilder,但是,这方面运气不佳。

java java-8 java-stream

2
推荐指数
1
解决办法
1万
查看次数

Java将列表转换为集合映射

假设我有一个名为Student的对象列表.对象学生的定义是这样的

public Class Student {
    private String studentName;
    private String courseTaking;
}
Run Code Online (Sandbox Code Playgroud)

在学生列表中,可以有多个学生对象具有相同的studentName但不同的courseTaking.现在我想将学生列表转换为studentName和courseTaking的地图

Map<String, Set<String>>
Run Code Online (Sandbox Code Playgroud)

关键是studentName,并且该值是同一个学生作为一组放在一起的所有课程.我怎么能用stream()和collect()做到这一点?

java lambda java-8 java-stream

2
推荐指数
1
解决办法
1934
查看次数

将`List <Employee>`转换为`Map <Integer,List <Employee >>`的方法

我怎样才能转换List<Employee>Map<Integer,List<Employee>>.

List<Employee>基于员工Object中存在的depId的组,Map键是depId.

java.util.*或Google Guava中是否有任何方法可以将其转换为迭代列表.

java guava

0
推荐指数
1
解决办法
164
查看次数

Java 8 Streams API - 列表到映射 - 合并键

我有一个 Fruit 对象列表,其中每个 Fruit 都有一个'name''desc'。此水果列表将包含'name'不同的重复项'desc'i.e.

{"apple","its red"},{"banana","its yellow"},{"apple", "its hard"}
Run Code Online (Sandbox Code Playgroud)

现在,我想使用 Java 8 Streams API 迭代此 Fruits 列表,并将它们映射到 MAP 中,使得键为“name”且不得包含重复项。

输出应该是:

key - "apple", value - List of desc i.e.  {"its red","its hard"}
key - "banana", value - {"its yellow"}
Run Code Online (Sandbox Code Playgroud)

请指导。

merge hashmap java-8 java-stream

0
推荐指数
1
解决办法
817
查看次数

标签 统计

java-8 ×7

java ×6

java-stream ×6

dictionary ×2

lambda ×2

collections ×1

guava ×1

hashmap ×1

merge ×1

set ×1