我正在填充一个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++;
}
上面的代码有效,但我想知道是否可以使用Java 8流完成.谢谢.
我有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; …我试图按照Java 8 List 进入 Map并尝试在一个列表中更改 Set to Map
而不是循环(有效)
for (Type t : toSet()) {
    map.put(Pair.of(t, Boolean.TRUE), this::methodAcceptingMap);
}
我尝试使用以下解决方案:
toSet().stream()
       .collect(Collectors.toMap(Pair.of(Function.identity(), Boolean.TRUE), 
                                 this::methodAcceptingMap));
但在转换时出错:
Type mismatch: cannot convert from Pair<Function<Object,Object>,Boolean> 
to Function<? super T,? extends K>
我的地图
private Map<Pair<Type, Boolean>, BiConsumer<Pair<Type, Boolean>, Parameters>> map =
      new HashMap<>();
嗨,我在执行代码时遇到错误:
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)
我正在尝试将我的列表分组到地图中:
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 …我一直在尝试使用Stream 的收集方法,将列表转换为 HashMap。我使用下面的代码作为参考:
String result = list.parallelStream().collect(StringBuilder::new,
            (response, element) -> response.append(" ").append(element),
            (response1, response2) -> response1.append(",").append(response2.toString()))
            .toString();
当我在 eclipse 中编写以下不完整的语句并在 ? 处执行ctrl+操作时space
Map<String,Choice> map1=  list1.stream().collect(()-> new HashMap<String,Choice>(), 
        (r,s) -> r.?,(r,s) -> r.putAll(s));
考虑到使用 StringBuilder 的代码片段,我的期望是,累加器函数的第一个参数应该是 HashMap,因为我已使用 HashMap::new 作为供应商函数。根据这种理解,eclipse应该建议我使用HashMap的方法,但事实并非如此。
然而,这似乎工作正常
list1.stream().collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
已经提到了Java 8 Int Stream Collect with StringBuilder,但是,这方面运气不佳。
假设我有一个名为Student的对象列表.对象学生的定义是这样的
public Class Student {
    private String studentName;
    private String courseTaking;
}
在学生列表中,可以有多个学生对象具有相同的studentName但不同的courseTaking.现在我想将学生列表转换为studentName和courseTaking的地图
Map<String, Set<String>>
关键是studentName,并且该值是同一个学生作为一组放在一起的所有课程.我怎么能用stream()和collect()做到这一点?
我怎样才能转换List<Employee>为Map<Integer,List<Employee>>.
List<Employee>基于员工Object中存在的depId的组,Map键是depId.
java.util.*或Google Guava中是否有任何方法可以将其转换为迭代列表.
我有一个 Fruit 对象列表,其中每个 Fruit 都有一个'name'和'desc'。此水果列表将包含'name'不同的重复项'desc'。i.e. 
{"apple","its red"},{"banana","its yellow"},{"apple", "its hard"}
现在,我想使用 Java 8 Streams API 迭代此 Fruits 列表,并将它们映射到 MAP 中,使得键为“name”且不得包含重复项。
输出应该是:
key - "apple", value - List of desc i.e.  {"its red","its hard"}
key - "banana", value - {"its yellow"}
请指导。
java-8 ×7
java ×6
java-stream ×6
dictionary ×2
lambda ×2
collections ×1
guava ×1
hashmap ×1
merge ×1
set ×1