小编Wil*_*ass的帖子

如何从R data.frame获取行

我有一个带有列标题的data.frame.

如何从data.frame获取特定行作为列表(列标题作为列表的键)?

具体来说,我的data.frame是

      A    B    C
    1 5    4.25 4.5
    2 3.5  4    2.5
    3 3.25 4    4
    4 4.25 4.5  2.25
    5 1.5  4.5  3

我希望得到一个相当于的行

> c(a=5, b=4.25, c=4.5)
  a   b   c 
5.0 4.25 4.5 
Run Code Online (Sandbox Code Playgroud)

indexing r dataframe

96
推荐指数
4
解决办法
19万
查看次数

HashSet.remove()和Iterator.remove()不起作用

我遇到了Iterator.remove()在HashSet上调用的问题.

我有一组带时间戳的物体.在向Set添加新项目之前,我遍历该集合,识别该数据对象的旧版本并将其删除(在添加新对象之前).时间戳包含在hashCode和equals()中,但不包括equalsData().

for (Iterator<DataResult> i = allResults.iterator(); i.hasNext();)
{
    DataResult oldData = i.next();
    if (data.equalsData(oldData))
    {   
        i.remove();
        break;
    }
}
allResults.add(data)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,i.remove()默默地对集合中的某些项目失败(没有异常).我已经证实了

  • 实际上调用了i.remove()行.我可以直接在Eclipse的断点处从调试器调用它,但仍然无法更改Set的状态

  • DataResult是一个不可变对象,因此在最初添加到集合后它不能更改.

  • equals和hashCode()方法使用@Override来确保它们是正确的方法.单元测试验证了这些工作.

  • 如果我只使用for语句和Set.remove,这也会失败.(例如循环遍历项目,找到列表中的项目,然后在循环后调用Set.remove(oldData)).

  • 我已经在JDK 5和JDK 6中进行了测试.

我以为我必须遗漏一些基本的东西,但是在我的同事上度过了一些重要的时间后,我感到难过.有什么建议要检查吗?

编辑:

有一些问题 - DataResult是真正不可改变的.是.没有制定者.当检索Date对象(这是一个可变对象)时,它通过创建一个副本来完成.

public Date getEntryTime()
{
    return DateUtil.copyDate(entryTime);
}

public static Date copyDate(Date date)
{
    return (date == null) ? null : new Date(date.getTime());
}
Run Code Online (Sandbox Code Playgroud)

进一步编辑(一段时间后):为了记录 - DataResult不是一成不变的!它引用了一个对象,该对象的哈希码在持久化到数据库时发生了变化(我知道这是一种不好的做法).事实证明,如果使用瞬态子对象创建了DataResult,并且子对象被持久化,则DataResult哈希码已更改.

非常微妙 - 我多次看了这个,并没有注意到缺乏不变性.

java collections

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

Spring控制器方法的不需要的逗号分隔参数

我看到一个Spring MVC控制器的奇怪问题.此方法用于设置密码.它需要两个表单参数"password"和"confirmPassword".第一次调用表单时,这很好 - 将字段传递给方法.

第二次提交表单时会出现此问题.如果表单第一次填写不正确,则会正确地将用户发送回表单页面并提示再次输入密码.但是,第二次尝试时该方法的参数不正确.参数是逗号分隔的列表,其中包括与第二个连接的第一个表单条目.

例:

带字段"password"的第一个表单帖子的值为"abc".方法参数"password"的值为"abc".

带有字段"password"和值"xyz"的第二个表单帖子.方法参数"password"的值为"xyz,abc".

Spring MVC文档并没有说明有用.不知何故,旧的表格帖子被记住并包括在内.有人有解决这个问题的经验吗?

控制器方法如下:

@RequestMapping(value = "/account/reset", method = RequestMethod.POST)
public String resetPassword(@RequestParam("password") String password,
        @RequestParam("confirmPassword") String confirmPassword,
        @RequestParam("hash") String hash, ModelMap model) throws EncryptionException
{
    String userName = stringEncrypterService.decrypt(hash);
    User user = userService.findUserByPath(userName);

    if (!password.equals(confirmPassword))
    {
        model.put("hash", hash);
        model.put("user", user);
        model.put("error",
                "The two passwords you entered below do not match. Please try again.");

        return "users/resetPassword";
    }

    userService.updatePassword(user, password);
    emailService.sendUserInfoChange(user);
    return "redirect:/session/signin?passwordReset=true";
}
Run Code Online (Sandbox Code Playgroud)

更新.一些响应者已经建议可能有问题的帖子有额外的URL参数或隐藏的表单字段导致重复的字段名称.我向Fiddler确认情况并非如此.这是第三次尝试的原始请求.(略微编辑以删除会话cookie).

POST http://wintest.foriodev.com/simulate/account/reset/ HTTP/1.1
Host: wintest.foriodev.com
Connection: keep-alive
Referer: http://wintest.foriodev.com/simulate/account/reset/ …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc

23
推荐指数
2
解决办法
9344
查看次数

从Java批量插入Oracle

我需要在Oracle中快速插入许多小行.(5个领域).

使用MySQL,我将插入分成100个组,然后对每组100个插入使用一个insert语句.

但是对于Oracle,用户反馈是质量插入(1000-30000之间)太慢.

是否有类似的技巧可以用来加速从Java到Oracle的程序化插入?

java sql oracle performance bulk-operations

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

如何使自定义404页面成为转发,而不是Tomcat中的重定向

我在Tomcat中提供了一个Spring MVC应用程序.当用户输入未找到的页面时,它将显示我在web.xml中设置的默认404页面

<error-page>
   <error-code>404</error-code>
   <location>/errors/404/</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

问题是如果用户转到 http:// mydomain/bad/url

它被重定向到 http:// mydomain/errors/404 /

这很烦人,因为如果用户键入错误的URL,很难看出错误是什么并纠正错误.

404错误后,我希望它保留原始URL,但显示错误页面.(即前进,而不是重定向).这是我对大多数Web服务器如何工作的印象.这可能吗?

error-handling tomcat servlets

10
推荐指数
1
解决办法
6776
查看次数

在Spring中绑定时保护特定字段

我在允许用户编辑个人资料信息的页面上工作.我希望他们能够编辑他们的公共信息,但不允许他们更改系统标志,例如他们的用户类型.

这是用Spring MVC(3.0)实现的.用户对象具有典型字段,例如firstName,lastName,email(都应该是可编辑的)和一个布尔administrator(这不应该是可编辑的.

我的方法看起来像这样:

@RequestMapping(method = RequestMethod.POST)
public String doEdit(
        @ModelAttribute("user") User user,
        BindingResult result,
        ModelMap model)
throws IOException
{
      // validate, blah blah
      // save user object
      // return page

}
Run Code Online (Sandbox Code Playgroud)

我的表单包含的字段firstName,lastName等等,似乎很好地工作.

问题是,如果恶意用户使用参数administrator"true" 发布查询,他们可以在不应该设置此字段时设置该字段.

我知道我可以创建一个单独的"表单"对象,只包含我想要更改的字段并将其用于自动绑定.(复制数据).问题是我有很多地方使用这种技术.(对于用户和其他对象).当我想添加字段时,维护是一件麻烦事.

有没有办法在Spring MVC中使用注释或其他技术将参数列入白名单并防止更改任意域对象属性?

java spring spring-mvc

9
推荐指数
1
解决办法
6049
查看次数

使用Node JS代理http并修改响应

我正在尝试用Node JS编写一个API服务的前端(我是一个相对初学者).

我希望能够让用户将他们的浏览器指向我的节点服务器并发出请求.节点脚本将修改请求的输入,调用api服务,然后修改输出并传递回用户.

我喜欢这里的解决方案(使用Express JS和node-http-proxy),因为它直接从用户通过我的站点将cookie和标题传递给api服务器.

node.js/express中的代理请求

我看到如何修改请求的输入,但我无法弄清楚如何修改响应.有什么建议?

api http-proxy node.js

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