本文将分享具有相同键的Collectors.toMap的详细内容,并且还将对打印相同键进行详尽解释,此外,我们还将为大家带来关于android–具有相同返回类但不同键的多个@Binds、ASP.NET
本文将分享具有相同键的Collectors.toMap的详细内容,并且还将对打印相同键进行详尽解释,此外,我们还将为大家带来关于android – 具有相同返回类但不同键的多个@Binds、ASP.NET razor 页面中具有相同键的多个路由参数、asp.net – 一键发布:执行发布时出现异常:已添加具有相同键的项目、asp.net – 无法为’localhost’生成绑定重定向.已添加具有相同键的项目的相关知识,希望对你有所帮助。
本文目录一览:- 具有相同键的Collectors.toMap(打印相同键)
- android – 具有相同返回类但不同键的多个@Binds
- ASP.NET razor 页面中具有相同键的多个路由参数
- asp.net – 一键发布:执行发布时出现异常:已添加具有相同键的项目
- asp.net – 无法为’localhost’生成绑定重定向.已添加具有相同键的项目
具有相同键的Collectors.toMap(打印相同键)
我有以下代码来获取地图:
List<MyObject> myList = myMethod.getList();myList.stream().collect( Collectors.toMap( MyObject::getKey, MyObject::getValue, (e1, e2) -> { System.out.println("Duplicate keys !!!"); return e1; }, LinkedHashMap::new ));
如何打印带有重复键的消息“重复键”?
答案1
小编典典如何打印带有重复键的消息“重复键”?
使用当前代码,您将收到消息“重复键”,MyObject
其中包含至少2个实例的列表,这些实例MyObject
具有与对象相同的值getKey()
,例如Arrays.asList(newMyObject("foo", "bar"), new MyObject("foo", "bar2"))
。
如何获得对应的密钥?
到目前为止,还无法获得相应的键,当前从合并功能中获得的实际上是与相同键映射的2个值,这些值需要合并以仅保留对应键的一个值。
您的问题是 Java 9 中已解决的已知问题,有关更多详细信息,请参见
JDK-8040892
,相应的修复将使我们能够从合并函数中获取要合并的键和值。
另请参见为什么Collectors.toMap会报告值,而不是在重复键错误时报告键?
android – 具有相同返回类但不同键的多个@Binds
以下所有内容均与dagger 2.10和dagger.android包一起使用.
假设我有一个课程,我想在多个活动中注入.
public class DemosharedClass {
Activity activity;
@Inject public DemosharedClass(Activity activity) {
this.activity = activity;
}
}
然后,使用最新的Dagger API,我的类被定义为
public class DemoActivity extends DaggerActivity {
@Inject DemosharedClass demosharedClass;
// ...
}
public class Demo2Activity extends DaggerActivity {
@Inject DemosharedClass demosharedClass;
// ...
}
每个活动都将其模块和子组件定义为(Demo2Activity的相同内容)
@Module(subcomponents = DemoActivitySubcomponent.class)
public abstract class DemoActivityModule {
@Binds
@IntoMap
@ActivityKey(DemoActivity.class)
abstract AndroidInjector.Factory<? extends Activity>
bindDemoActivityInjectorFactory(DemoActivitySubcomponent.Builder builder);
// This is set so SharedClass can be injected using its constructor
// There is the same in Demo2ActivityModule
@Binds abstract Activity bindActivity(DemoActivity demoActivity);
}
@Subcomponent
public interface DemoActivitySubcomponent extends AndroidInjector<DemoActivity> {
@Subcomponent.Builder
abstract class Builder extends AndroidInjector.Builder<DemoActivity> {}
}
最后,app组件定义为
@Component(modules = {
ApplicationModule.class,
AndroidInjectionModule.class,
DemoActivityModule.class,
Demo2ActivityModule.class,
})
interface DemoApplicationComponent {
DemoApplication injectApplication(DemoApplication application);
}
现在,我在构建项目时遇到此错误:
Error:(11, 11) error: [dagger.android.AndroidInjector.inject(T)] android.app.Activity is bound multiple times:
@Binds android.app.Activity dagger.demo.DemoActivityModule.bindActivity(dagger.demo.DemoActivity)
@Binds android.app.Activity dagger.demo.Demo2ActivityModule.bindActivity(dagger.demo.Demo2Activity)
我得到了错误,我认为这是因为它们在相同的范围内,即应用程序组件.
我想到为两个DemoSubcomponents创建一个公共模块,看起来像下面这样,但有类似的错误.
@Module
public abstract class SharedClassModule {
@Binds abstract Activity bindContext(DemoActivity demoActivity);
@Binds abstract Activity bindContext(Demo2Activity demo2Activity);
}
问题:我该怎么做?
解决方法:
您需要在每个子组件上单独绑定:
@Module interface DemoActivitySubcomponentModule {
@Binds abstract Activity bindContext(DemoActivity demoActivity);
// ...other bindings unique to DemoActivity and not DemoActivity2
}
@Subcomponent(modules={DemoActivitySubcomponentModule.class})
public interface DemoActivitySubcomponent extends
AndroidInjector<DemoActivity> {
@Subcomponent.Builder
abstract class Builder extends AndroidInjector.Builder<DemoActivity> {}
}
由于AndroidInjector.Builder中的@BindsInstance Builder seedInstance(DemoActivity),Dagger从DispatchingAndroidInjector开始调用AndroidInjector.Builder.create()
,Dagger确实知道如何至少提供DemoActivity实例.但是,DemoActivity和Activity(或Context)之间没有内置绑定,因此必须在子组件而不是组件上进行绑定.通过将带有该绑定的模块放在适当的@Subcomponent上,可以确保在每个相应的子组件中,Activity绑定转到Dagger知道的正确类型.
请注意,DemoActivityModule中的@Binds @IntoMap @ActivityKey(…)绑定仍然需要转到ApplicationComponent,因此ApplicationComponent可以确定从要注入的Activity的类创建哪个子组件.您特别希望新的DemoActivitySubcomponentModule转到DemoActivitySubcomponent,以便在DemoActivity2Subcomponent无法看到它的地方生成Activity-to-DemoActivity.
作为旁注,您看到的问题是两个绑定到Activity的冲突,它发生在同一个组件中.说同一个范围是不对的,因为(尽管您可能会选择将@ActivityScope等范围注释添加到每个子组件中),但没有范围注释可以帮助您. seedInstance仅适用于每个当前未扩展的子组件,它将与祖先组件中的绑定以及子组件特定的模块组合.
ASP.NET razor 页面中具有相同键的多个路由参数
如何解决ASP.NET razor 页面中具有相同键的多个路由参数?
我需要在 ASP.NET
razor pages 应用程序中对表数据创建多个快速过滤器。
例如 Show only my issues
、Show issues from London location
等过滤器
我想使用单个路由参数 FilterBy
来管理所有这些快速过滤器,它可以使 url 像这样:
baseURL?FilterBy=OnlyMyIssues&FilterBy=LondonLocation
有人可以帮我解决这个问题吗?
解决方法
您可以使用字符串数组 (string[]
) 类型的参数来捕获相同类型和查询字符串键的多个值。例如:
[HttpGet("/GetStuff")]
public IActionResult GetStuff([FromQuery] string[] FilterBy)
{
// Apply each value in FilterBy,if any
}
对于这个查询:
GET /getstuff?filterby=foo&filterby=bar
您应该会在 API 方法中看到这一点:
如果您的过滤器需要不同类型的值,例如布尔值和字符串,这将不起作用或不是一个好的设计。最好使用像 issueType
和 location
这样的专用键,每个键都需要合适的值类型。
asp.net – 一键发布:执行发布时出现异常:已添加具有相同键的项目
可能相关的事情:
>我正在使用Team Foundation.我遇到了一些麻烦(用户错误)
有一段时间了,但我把一切都恢复到应有的状态
(我认为).
>有一次,我使用了EDMX.我删除了支持从头开始制作我的表模型.
>我再也找不到我的出版资料,也无法弄清楚如何制作新的出版资料.我以为它应该在〜/ PublishProfiles文件夹中.它不在那里.
我知道我没有提供很多信息,但我甚至不知道从哪里开始.我很乐意根据要求提供其他任何东西.谢谢.
编辑
我应该注意它在localhost服务器上构建和运行完美.
编辑2
我回滚到源代码控制上最老的版本,它工作.我想我可以煞费苦心地完成每个变更集.另外,我确实找到了PublishProfiles文件夹.我确认没有对配置文件进行任何更改.
解决方法
我设置了一个代码优先的实体上下文,比如MyDBContext.在我的发布配置文件myprofile.pubxml中,有些代码自动插入如下:
<PublishDatabaseSettings> <Objects xmlns=""> <ObjectGroup Name="MyDBContext" ...... <MSDeployParameterValue Include="$(DeployParameterPrefix)MyDBContext-Web.config Connection String" />
然后,我决定尝试EDMX的东西.但为了以防万一,我保存了旧结构.现在文件看起来像这样:
<PublishDatabaseSettings> <Objects xmlns=""> <ObjectGroup Name="MyDBContext" Order="1" ...... <ObjectGroup Name="myEntities" Order="2" ...... <MSDeployParameterValue Include="$(DeployParameterPrefix)MyDBContext-Web.config Connection String" /> <MSDeployParameterValue Include="$(DeployParameterPrefix)myEntities-Web.config Connection String" />
但后来,我决定放弃EDMX的东西.不知何故,这不是删除.pubxml文件中的第二组条目,而是发生了这种情况:
<PublishDatabaseSettings> <Objects xmlns=""> <ObjectGroup Name="MyDBContext" Order="1" ...... <ObjectGroup Name="MyDBContext" Order="2" ...... <MSDeployParameterValue Include="$(DeployParameterPrefix)MyDBContext-Web.config Connection String" /> <MSDeployParameterValue Include="$(DeployParameterPrefix)MyDBContext-Web.config Connection String" />
瞧.第二集删除了,我很高兴.
asp.net – 无法为’localhost’生成绑定重定向.已添加具有相同键的项目
我正在尝试安装NuGet包 – >一瞥.
安装非常简单:
PM> Install-Package Glimpse
Successfully installed ‘Glimpse 0.79’.
Successfully added ‘Glimpse 0.79’ to
localhost.
但后来我收到粉红色的错误
无法为’localhost’生成绑定重定向.已添加具有相同键的项目.
我得到一个关于“Microsoft.Web.Infrastructure”的引用的错误,我通过找到该DLL并将其放在我的网站的bin文件夹中解决
现在我在http:// localhost / websiteName / Glimpse / Config上收到了http 404错误
我假设错误是因为配置文件并不存在,并且它尝试插入IIS的路由无法正常工作,因此无法找到该页面.
非常感谢任何帮助,谢谢你提前!
解决方法
我希望,一旦我们获得更多官方支持,您在此处列出的所有问题都将“消失”.
如果你真的热衷于启动和运行,我建议从gitHub.com/Glimpse获取源代码并手动引用Glimpse.Net.
我还标记了这个问题,以确保在我们准备发布官方支持WebForms的时候测试你的用例.
今天关于具有相同键的Collectors.toMap和打印相同键的介绍到此结束,谢谢您的阅读,有关android – 具有相同返回类但不同键的多个@Binds、ASP.NET razor 页面中具有相同键的多个路由参数、asp.net – 一键发布:执行发布时出现异常:已添加具有相同键的项目、asp.net – 无法为’localhost’生成绑定重定向.已添加具有相同键的项目等更多相关知识的信息可以在本站进行查询。
本文标签: